Git को "ब्लॉक चेन" क्यों नहीं माना जाता है?


174

Git की आंतरिक डेटा संरचना डेटा ऑब्जेक्ट्स का एक पेड़ है, जिसमें प्रत्येक ऑब्जेक्ट केवल अपने पूर्ववर्ती को इंगित करता है। प्रत्येक डेटा ब्लॉक हैशेड है। सहेजे गए हैश और वास्तविक हैश विचलित होने पर एक मध्यवर्ती ब्लॉक (संशोधित या त्रुटि) पर ध्यान दिया जाएगा।

यह अवधारणा ब्लॉक चेन से कैसे भिन्न है?
Git को ब्लॉक चेन के उदाहरण के रूप में सूचीबद्ध नहीं किया गया है, लेकिन कम से कम सारांश में, दोनों डेटा संरचना विवरण समान दिखते हैं: डेटा ब्लॉक, एकल दिशा रिवर्स लिंकिंग, हैश, ...)।

तो यह अंतर कहां है, कि Git को ब्लॉक चेन नहीं कहा जाता है?


2
Git को ब्लॉकचेन के उदाहरण के रूप में सूचीबद्ध नहीं किया जाता है जब मैंने पहली बार यह जानने की कोशिश की थी कि ब्लॉकचेन क्या है, तो मुझे सबसे प्रमुख उदाहरण के रूप में जाने के लिए संदर्भित किया गया था (मेरे पास अब सटीक लिंक नहीं है, लेकिन यह शीर्ष से था "ब्लॉकचेन" के लिए Google खोज द्वारा लौटी सूची)
लियोन

2
गिट और ब्लॉकचैन दोनों मर्कल पेड़ों का उपयोग उनकी मूलभूत अंतर्निहित डेटा संरचना के रूप में कर रहे हैं । लेकिन वह अकेले गिट को एक ब्लॉकचेन, या दूसरे तरीके से नहीं बनाता है। - यदि आप Git (और इसके इंटर्नल) को जानते हैं, तो आप मर्कल पेड़ों को जानते हैं, जो कि ब्लॉकचेन कैसे काम करता है, यह समझने में काफी मददगार साबित हो सकता है।
प्रहार

24
प्रिय करीबी मतदाताओं, क्या आप अपने कारणों की व्याख्या कर सकते हैं? मुझे 2 लाइक, अच्छे कमेंट्स और एक जवाब दिखाई देता है। यह राय आधारित क्यों है? यह डेटा संरचनाओं और एल्गोरिदम के बारे में है, जो ब्लॉक श्रृंखला के रूप में गिट को अर्हता प्राप्त करने के लिए सीवन नहीं करता है।
पैबेल्स

2
यह आपकी राय है कि "यह नहीं माना जाता है ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou

4
@ v.oddou मर्कले के पेड़ 1979 से मौजूद हैं। सिर्फ इसलिए कि दो प्रौद्योगिकियां मर्कल के पेड़ों को अपनी अवधारणा के हिस्से के रूप में प्रमुखता से इस्तेमाल कर रही हैं, इससे वे समान नहीं बनते हैं। यह सिर्फ मर्कल पेड़ों के लिए या तो Git या ब्लॉक चेन को कम करने के रूप में उनमें से कोई भी सही नहीं है कर रहे हैं मर्कल पेड़। वे ही उनका उपयोग करते हैं। यह लिंक किए गए पोस्ट को पूरी तरह से अप्रासंगिक बना देता है क्योंकि यह वास्तव में मर्कल पेड़ों के बारे में बात कर रहा है, और जंजीरों को अवरुद्ध नहीं करता है।
प्रहार

जवाबों:


53

git कई कारणों से ब्लॉकचेन तकनीक का उदाहरण नहीं है (ये पहली बार दिमाग में आए थे):

  1. ब्लॉकचेन कार्यान्वयन में, ब्लॉकचेन में जोड़े जाने से पहले प्रत्येक ब्लॉक को स्वतंत्र रूप से कई बार सत्यापित किया जाता है। यह वास्तव में ब्लॉकचेन प्रौद्योगिकी के बारे में सबसे महत्वपूर्ण चीजों में से एक है और यही इसकी "अनहोनी" को सुनिश्चित करता है। दूसरी ओर, कई gitपरियोजनाओं के लिए स्वतंत्र सत्यापन की आवश्यकता नहीं होती है और जब वे ऐसा करते हैं, तो उन्हें केवल एक व्यक्ति को एक भंडार पर हस्ताक्षर करने से पहले उस पर हस्ताक्षर करने की आवश्यकता होती है। इसलिए, सत्यापन के अधिकांश एक बिंदु पर, जिस पर आपको भरोसा करना चाहिए, gitब्लॉकचेन प्रौद्योगिकी के मूल सिद्धांतों में से एक को तोड़ता है।

  2. एक gitरिपॉजिटरी आवश्यक रूप से कई सर्वरों पर डुप्लिकेट नहीं है। आप gitस्थानीय स्तर पर भंडार से काम कर सकते हैं और यदि आपकी स्थानीय डिस्क दूषित हो गई है, तो आप सब कुछ खो देंगे। ब्लॉकचेन तकनीक का अर्थ है कि सर्वरों पर बही का प्रजनन।

  3. आप gitइतिहास को फिर से लिख सकते हैं । एक git push <remote> <branch> --forceजहां <branch>पर नहीं, बल्कि किसी पिछली स्थिति में सेट किया गया है <remote>इतिहास को फिर से लिखने होगा। ब्लॉकचेन में, बही एक अपरिवर्तनीय इतिहास है।


104
"ब्लॉकचेन में, लेज़र एक अपरिवर्तनीय इतिहास है।" - तो इतिहास है। जब "इतिहास का पुनर्लेखन" किया जाता है, तो आप अतीत में एक बिंदु से शुरू करते हैं और नए कमिट जोड़ते हैं। ब्लॉकचेन के साथ भी ऐसा ही संभव है और वास्तव में, यह हर बार कांटा होता है, भले ही बाद में इसे छोड़ दिया जाए।
होल्गर जस्ट

8
जहाँ तक मैं ब्लॉक चेन्स बनाम गिट को समझता हूँ, आप ब्लॉक चेन्स को फिर से लिख सकते हैं, जब तक कि आप हैश टकराव की समस्या को हल नहीं करते। और गिट के लिए, हाँ आप फिर से लिख सकते हैं, लेकिन सभी अवशेषों का अभी भी मूल इतिहास है। इतिहास को पुनर्जीवित करने से नए हैश और एक अलग पेड़ का निर्माण होता है। यदि ब्लॉक चेन ऐसे ऑपरेशन से अधिक नहीं है, तो यह एक वैध तर्क नहीं है, क्योंकि मैं इसे लागू कर सकता हूं यदि मैं चाहता हूं। या रिवर्स में मैं एक शाखा को संरक्षित के रूप में मजबूर पुश को अस्वीकार कर सकता हूं।
पैबेल्स

4
@HolgerJust git का इतिहास परिवर्तनशील है। push --forceएक ही शाखा पर करने पर आप कचरा संग्रहकर्ता द्वारा साफ किए गए कमिट के संदर्भ खो रहे हैं। यह एक कांटे से अलग है जो इतिहास का पुनर्लेखन नहीं है, बल्कि एक वैकल्पिक विकास मार्ग है।
11

24
क्या हम संक्षेप में बता सकते हैं कि Git को एक विशेष वर्कफ़्लो को लागू करके और कई ऑपरेशनों को मना करने से ब्लॉक चेन मोड में संचालित किया जा सकता है?
पैबेल्स

4
@Pabbels हाँ, मैं इससे सहमत हूँ। डिफ़ॉल्ट रूप से और नियमित उपयोग में यह नहीं है, लेकिन एक विशेष वर्कफ़्लो के साथ यह होगा।
houtanb

123

Git और blockchains समान दिखाई देने का कारण यह है कि वे दोनों अपने अंतर्निहित डेटा संरचना के रूप में मर्कल पेड़ों का उपयोग कर रहे हैं । मर्कल ट्री एक ऐसा पेड़ है, जहां प्रत्येक नोड को उनकी सामग्री के क्रिप्टोग्राफिक हैश मान के साथ लेबल किया जाता है, जिसमें उनके बच्चों के लेबल शामिल होते हैं।

गिट का निर्देशित चक्रीय ग्राफ बिल्कुल ऐसा है, एक मर्कल ट्री जहां प्रत्येक नोड (टैग, कमिट, ट्री या ब्लॉब ऑब्जेक्ट) को उसकी सामग्री के हैश और उसके "बच्चे" के लेबल के साथ लेबल किया जाता है। ध्यान दें कि कमिट करने के लिए, "बच्चे" शब्द को माता-पिता की समझ के साथ थोड़ा संघर्ष होता है: माता-पिता का मानना ​​है कि कॉमिट्स के बच्चे हैं , आपको बस ग्राफ को एक पेड़ के रूप में देखना होगा जो इसे फिर से विकसित करता रहता है।

ब्लॉकचैन इस से बहुत मिलते-जुलते हैं, क्योंकि वे भी इस तरह से बढ़ते रहते हैं, और वे डेटा की अखंडता को सुनिश्चित करने के लिए इसकी मर्कल ट्री प्रॉपर्टी का भी इस्तेमाल कर रहे हैं। लेकिन आमतौर पर, ब्लॉकचेन को केवल मर्कल पेड़ों की तुलना में अधिक समझा जाता है, जहां वे "बेवकूफ सामग्री ट्रैकर" गिट से अलग हो रहे हैं । उदाहरण के लिए, ब्लॉकचेन का आम तौर पर एक ब्लॉक स्तर पर एक उच्च विकेंद्रीकृत प्रणाली होने का मतलब है (सभी ब्लॉकों को एक ही स्थान पर होने की आवश्यकता नहीं है)।

ब्लॉकचेन को समझना कठिन है (व्यक्तिगत रूप से, मैं अभी भी इसके बारे में सब कुछ समझने से बहुत दूर हूं), लेकिन मैं गिट इंटर्ल्स को मर्कल पेड़ों को समझने का एक अच्छा तरीका मानता हूं जो निश्चित रूप से ब्लॉकचेन के बारे में एक बुनियादी हिस्से को समझने में मदद करता है।


24
मुझे खेद है, लेकिन कहीं भी ब्लॉकचेन कुछ भी नहीं करता है, जो गिट से अधिक करता है। ब्लॉकचेन बिलकुल बेवकूफ की तरह हैं। यदि आप ऐसा नहीं मानते हैं, तो आप ओवरहीपेड हैं। सहकर्मी नेटवर्क और सर्वसम्मति प्रणाली एक अलग चीज है।
v.oddou


आमतौर पर, git रिपॉजिटरी में एक रूट कमिट होता है, लेकिन किसी भी संख्या में शाखाएं हो सकती हैं। यदि आप एक शाखा में अंतिम प्रतिबद्ध को मूल प्रतिबद्ध और बच्चों के रूप में माता-पिता के रूप में देखते हैं, तो आपके पास एक पेड़ है जिसमें कई जड़ें उगती हैं ... मुझे लगता है कि यह मर्कल वृक्ष पर एक भिन्नता है जहां माता-पिता के संदर्भ सामग्री के बजाय हैं बच्चे का संदर्भ। कई माता-पिता और बच्चे हो सकते हैं इसलिए यह एक पेड़ भी नहीं है।
हरमन

22

बिटकॉइन जैसी साइबर मुद्राएँ, वितरित वितरित क्रिप्टोग्राफ़िक श्रृंखला (ब्लॉक ट्री) की क्रिप्टोग्राफ़िक श्रृंखला का उपयोग करती हैं। सामान्य उपयोग ने इसे 'ब्लॉकचेन' में छोटा कर दिया है

जबकि गिट ब्लॉक (मर्कल ट्री) की एक श्रृंखला का उपयोग करता है, इसमें वितरित कॉन्सनोग्राफ़िक घटकों की कमी होती है जो 'ब्लॉकचैन' शब्द का सामान्य उपयोग है।


17

Blockchainहै नहीं किसी भी ब्लॉक के बस किसी भी श्रृंखला।

Blockchainजब है वहाँ मुख्य श्रृंखला जब दो या अधिक बँट जाता है का निर्धारण करने का एक तरीका है , और कोई केंद्रीय सत्ता है कि दृढ़ संकल्प के लिए आवश्यक है जब।


17

क्रिप्टोक्यूरेंसी ब्लॉकचैन के विपरीत ; git में p2p भरोसेमंद सर्वसम्मति तंत्र नहीं है।


आप एक भरोसेमंद सर्वसम्मति प्रणाली को एक ब्लॉक चेन का हिस्सा क्यों मानते हैं? ब्लॉक श्रृंखला में विश्वास पैदा करने के कई तरीके हैं, git के लिए यह सिर्फ इतना है कि आप जानते हैं कि आपकी स्थानीय कॉपी में सब कुछ अगले पुल द्वारा हटाया नहीं जा सकता है और आप निर्दिष्ट करते हैं कि आप रिमोट कॉपी में बदलाव चाहते हैं। आपको केवल भरोसेमंद सर्वसम्मति की आवश्यकता है जब यह अन्यथा स्पष्ट नहीं होगा कि क्या सही है। Git में कई शाखाएं "सही" हो सकती हैं और Eventuell को एक साथ मिला सकते हैं।
allo

@allo GitHub आमतौर पर सत्य के केंद्रीय स्रोत के रूप में उपयोग किया जाता है, लेकिन एक व्यवस्थापक को बल से धक्का देने और इतिहास को ओवरराइड करने से क्या रोक रहा है? अगर कोई GitHub नहीं था और आपने अपने साथियों से खींच लिया था तो आप मर्ज संघर्षों को कैसे संभालते हैं? आप किसका अधिकार निर्धारित करते हैं?
मिगुएल मोटा

1
बलपूर्वक धक्का देने से कुछ नहीं होता। लेकिन जैसे एक ब्लॉकचेन मुझे गारंटी देता है, मैं इसका पता लगा सकता हूं क्योंकि मेरी श्रृंखला इन कमिटों को इस आधार पर सत्यापित नहीं कर सकती है। ब्लॉकचेन के साथ यही बात है, न कि विकेंद्री सहमति। और git में मैं स्पष्ट रूप से इस बात के लिए सहमति प्रोटोकॉल नहीं रखना चाहता कि मैं क्या विलय करता हूं (विकास एक लोकतंत्र नहीं है), लेकिन मैं वास्तव में उन्हें अपनी श्रृंखला में विलय करते समय नए कमिट्स पढ़ता हूं। तो मेरी नकल है सही है, क्योंकि यह और सामान मैं समीक्षा (मर्ज संघर्ष देखकर यानी) सामान मैं पहले से ही है और इस तरह की पुष्टि कर सकते हैं और फिर इसे में स्वीकार करते हैं।
एलो

1
@allo आप उस संबंध में सही हैं, हालांकि मैंने उत्तर "क्रिप्टोक्यूरेंसी ब्लॉकचैन" में कहा था, सामान्य रूप से ब्लॉकचेन नहीं, लेकिन अब मैं सोचता हूं कि मुझे लगता है कि इसके बारे में मेरा जवाब वास्तव में पूछे जाने वाले प्रश्न पर फिट नहीं लगता है क्योंकि मैं था अंतर्निहित डेटा संरचनाओं के बजाय एक पूरे के रूप में प्रणाली के बारे में सोचना
मिगुएल मोटा

आप गिट और क्रिप्टोकरेंसी में उपयोग की जाने वाली ब्लॉक चेन के अंतर के बारे में पूरी तरह से सही हैं। यह केवल इस सवाल का जवाब नहीं है कि कड़ाई से शब्द का उपयोग करते समय क्यों (या यदि) गिट को एक ब्लॉक श्रृंखला नहीं माना जाता है। यहां तक ​​कि वर्तमान में स्वीकृत उत्तर भी आपके उत्तर के समान है। मैं अब भी उस उत्तर को पसंद करता हूं, जो बाउंटी को मिला।
एलो

1

ब्लॉकचेन और गिट के लिए लक्ष्य अलग हैं, हालांकि दोनों डेटा संरचना के रूप में मर्कल पेड़ों का उपयोग करते हैं।

blockchain आम तौर पर अंतर-नोड संचार और नए ब्लॉक मान्य के लिए एक प्रोटोकॉल का पालन कर एक सहकर्मी से सहकर्मी नेटवर्क द्वारा किया जाता है। एक बार दर्ज किए जाने के बाद, किसी भी दिए गए ब्लॉक में डेटा को बाद के सभी ब्लॉकों के परिवर्तन के बिना रेट्रोएक्टली बदल दिया जा सकता है, जिसके लिए नेटवर्क बहुमत की सहमति की आवश्यकता होती है।

बिटकॉइन श्वेतपत्र के अनुसार:

विशुद्ध रूप से इलेक्ट्रॉनिक कैश के सहकर्मी से सहकर्मी संस्करण ऑनलाइन भुगतान को एक वित्तीय संस्थान से गुजरे बिना एक पार्टी से दूसरी पार्टी में सीधे भेजने की अनुमति देगा। डिजिटल हस्ताक्षर समाधान का हिस्सा प्रदान करते हैं, लेकिन मुख्य लाभ खो जाते हैं यदि एक विश्वसनीय तीसरे पक्ष को अभी भी दोहरे खर्च को रोकने के लिए आवश्यक है। हम एक सहकर्मी से सहकर्मी नेटवर्क का उपयोग कर दोहरे खर्च की समस्या के समाधान का प्रस्ताव रखते हैं। नेटवर्क टाइमस्टैम्प लेनदेन को हैश-आधारित प्रूफ-ऑफ-वर्क की एक निरंतर श्रृंखला में हैशिंग करता है, एक रिकॉर्ड बनाता है जिसे प्रूफ-ऑफ-वर्क को फिर से किए बिना बदला नहीं जा सकता है। सबसे लंबी श्रृंखला न केवल देखी गई घटनाओं के अनुक्रम के प्रमाण के रूप में कार्य करती है, बल्कि यह सबूत है कि यह सीपीयू शक्ति के सबसे बड़े पूल से आया है। जब तक सीपीयू बिजली के बहुमत को नोड्स द्वारा नियंत्रित किया जाता है जो नेटवर्क पर हमला करने में सहयोग नहीं कर रहे हैं, वे ' सबसे लंबी श्रृंखला और चौकी हमलावर उत्पन्न करेंगे। नेटवर्क को स्वयं न्यूनतम संरचना की आवश्यकता होती है। संदेश को एक सर्वोत्तम प्रयास के आधार पर प्रसारित किया जाता है, और नोड्स नेटवर्क पर छोड़ सकते हैं और अपनी इच्छा से फिर से काम कर सकते हैं, सबसे लंबे समय तक प्रूफ-ऑफ-वर्क चेन को स्वीकार करते हुए कि वे क्या हुए थे

जबकि Git सॉफ्टवेयर development.It दौरान स्रोत कोड में परिवर्तन पर नज़र रखने के प्रोग्रामर के बीच काम के समन्वय के लिए डिज़ाइन किया गया है के लिए एक वितरित संस्करण नियंत्रण प्रणाली है, लेकिन यह फ़ाइलों के किसी सेट में परिवर्तन ट्रैक करने के लिए इस्तेमाल किया जा सकता है। इसके लक्ष्यों में गति, डेटा अखंडता और वितरित, गैर-रेखीय वर्कफ़्लो के लिए समर्थन शामिल है।

लीनुस टोरवाल्ड्स के अनुसार:

कई मायनों में आप सिर्फ एक फाइलसिस्टम के रूप में गिट को देख सकते हैं - यह सामग्री-पता योग्य है, और इसमें संस्करण की धारणा है, लेकिन मैंने वास्तव में इसे एक फाइलसिस्टम व्यक्ति के दृष्टिकोण से समस्या पर आने के लिए तैयार किया है (हे, कर्नेल मैं क्या कर रहा हूं) , और मुझे वास्तव में एक पारंपरिक एससीएम प्रणाली बनाने में बिल्कुल शून्य रुचि है।


0

जैसा कि प्रहार ने कहा :

गिट और ब्लॉकचेन समान दिखाई देते हैं, क्योंकि वे दोनों टाइमस्टैम्पड लेनदेन के ऑर्डर के लिए मार्कले ट्री का उपयोग कर रहे हैं । एक मर्कल ट्री एक पेड़ डेटा संरचना है जहां प्रत्येक नोड को उनकी सामग्री के क्रिप्टोग्राफ़िक हैश मान के साथ लेबल किया जाता है, जिसमें इसके बच्चों के लेबल शामिल होते हैं।

पहला अंतर हैश फ़ंक्शन है : ब्लॉकचेन में एक बहुत महंगा हैश फ़ंक्शन होता है ताकि प्रत्येक ब्लॉक को खनन किया जा सके, व्हाटस ए गिट "ब्लॉक" को एक साधारण प्रतिबद्ध संदेश के साथ बनाया जा सकता है।

बिटकॉइन का उद्देश्य लेनदेन के क्रम में विश्वास जोड़ना है।ध्यान सबसे लंबी श्रृंखला पर है, क्योंकि यह गणना करने के लिए सबसे महंगा है और इस प्रकार सबसे अधिक सच होने की संभावना है।

बिटकॉइन इस बात की आवश्यकता को पूरा करता है कि हैश कुछ मापदंडों (0 की विशिष्ट संख्या के साथ शुरू होता है) से मिलता है, एक संतोषजनक हैश मिलने तक संदेश में मूल्य ("नॉनस") बढ़ाकर। यह खोजने का प्रयास करता है, लेकिन एक गैर के लिए सत्यापित करने के लिए केवल 1 गणना; और यदि एक से अधिक नॉनवेज एक संतोषजनक हैश का उत्पादन करते हैं, तो एक को कम और सत्य के रूप में लिया जाएगा। अन्य प्रमाणीकरण योजनाएँ हैश को जारी करने के लिए एक प्राधिकरण को केंद्रीकृत करके हैश को भरोसेमंद बनाती हैं, शायद नेटवर्क समझौते, या किसी अन्य विधि द्वारा मतदान किया जाता है।

ब्लॉकचेन डेटा लेन-देन तक सीमित है, जिसे मान्यता के अनुरूप होना चाहिए। लेन-देन को अगले ब्लॉक में शामिल करने के लिए वैध होना चाहिए। एक बिटकॉइन लेनदेन वास्तविक दुनिया में कुछ महत्वपूर्ण से मेल खाती है जो इस हस्तांतरण को रिकॉर्ड करने के लिए एक महंगे ब्लॉक का उपयोग करना उचित है, जैसे धन मूल्य का आदान-प्रदान। हम वास्तव में अंतिम लेज़र के बारे में परवाह नहीं करते हैं, यह वास्तविक दुनिया में कुछ के लिए एक रूपक है।

इसके विपरीत, Git ब्लॉक मनमानी हैं, क्योंकि एक कमिट में किसी भी राशि का डेटा हो सकता है। मान डेटा के परिवर्तन में निहित होता है, क्योंकि हम अंतिम उत्पाद के बारे में परवाह करते हैं, इसे git रिपॉजिटरी के अस्तित्व द्वारा मान्य किया जाता है।

Git का उद्देश्य कई उत्पाद विकल्पों को ट्रैक करने के लिए सस्ते "ledgers" को अनुमति देना है। Git में "खाता बही" जिसकी हमें परवाह है, वह हमारा अंतिम उत्पाद है; लेनदेन डेटा केवल रिकॉर्ड करता है कि उत्पाद कैसे बनाया गया था। हम अंतिम उत्पादों के कई संस्करणों को बनाने के लिए इसे बहुत सस्ता बनाना चाहते हैं, बस निर्माता को यह रिकॉर्ड करने के लिए पर्याप्त ओवरहेड की आवश्यकता है कि उन्होंने इस उत्पाद को कैसे बनाया। डेटा पर कोई स्पष्ट सत्यापन नहीं किया जाता है, यदि आप अच्छा दिखते हैं, तो आप अंतिम उत्पाद बनाए रखते हैं और यह अस्तित्व इस उत्पाद के निर्माण की श्रृंखला को उपयोगी बनाता है। यदि अंतिम उत्पाद खराब है या कमिट का क्रम अमान्य है, तो यह "लेज़र" कचरा संग्रहण के दौरान हटा दिया जाता है।

दूसरा अंतर यह है कि ब्लॉकचेन लेनदेन एक पूर्व वैध स्रोत से आना चाहिए। Git में, हमें परवाह नहीं है कि आप पेड़ का विस्तार करने के लिए किस डेटा का उपयोग करते हैं। ब्लॉकचेन में, लेनदेन एक पूर्व वैध स्रोत से आना चाहिए। उस अर्थ में, गिट हमारे पर्यावरण के विस्तार को ट्रैक करता है, जबकि ब्लॉकचेन एक बंद वातावरण के भीतर मूल्य के आदान-प्रदान को ट्रैक करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.