LyoKICogU2hlbGwzMgogKiBGcmVuY2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMTk5OCBKdWVyZ2VuIFNjaG1pZWQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZHcmFuZHMgaWP0bmVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImUGV0aXRzIGlj9G5lcyIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImTGlzdGUiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJkTpdGFpbHMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZBZmZpY2hhZ2UiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZHcmFuZHMgaWP0bmVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJlBldGl0cyBpY/RuZXMiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0ZSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkTpdGFpbHMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJUcmllciBsZXMgJmlj9G5lcyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUGFyICZub20iLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBhciAmdHlwZSIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiUGFyIHQmYWlsbGUiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQYXIgJmRhdGUiLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIlQmcmkgYXV0b21hdGlxdWUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJBbGlnbmVyIGxlcyBpY/RuZXMiLAlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlJhZnJh7mNoaXIiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDb2xsZXIiLAkJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkNvbGxlciBjb21tZSB1biBsaWVuIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOb3V2ZWF1IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOb3V2ZWF1IGQmb3NzaWVyIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOb3V2ZWF1ICZsaWVuIiwJCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlByb3Byael06XMiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnhwbG9yZXIiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIiZPdXZyaXIiLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDJm91cGVyIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZDb3BpZXIiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDcullciB1biAmbGllbiIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImU3VwcHJpbWVyIiwJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiJlJlbm9tbWVyIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImUHJvcHJp6XTpcyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJQYXJjb3VyaXIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFubnVsZXIiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiwCBwcm9wb3MgZGUgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXaW5lIGVzdCB1bmUgculhbGlzYXRpb24gZGUgOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkVudHJleiBsZSBub20gZCd1biBwcm9ncmFtbWUsIGQndW4gZG9zc2llciwgZCd1biBkb2N1bWVudCBvdSBkJ3VuZSByZXNzb3VyY2UgSW50ZXJuZXQsIGV0IFdpbmUgbCdvdXZyaXJhIHBvdXIgdm91cy4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJk91dnJpciA6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFubnVsZXIiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImUGFyY291cmlyLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgovKgoJc3BlY2lhbCBmb2xkZXJzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19ERVNLVE9QCQkiQnVyZWF1IgoJSURTX01ZQ09NUFVURVIJCSJQb3N0ZSBkZSB0cmF2YWlsIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIiZHcmFuZHMgaWP0bmVzIgoJSURTX1ZJRVdfU01BTEwJCSImUGV0aXRzIGlj9G5lcyIKCUlEU19WSUVXX0xJU1QJCSImTGlzdGUiCglJRFNfVklFV19ERVRBSUxTCSImROl0YWlscyIKCUlEU19TRUxFQ1QJCSJT6WxlY3Rpb25uZXIiCglJRFNfT1BFTgkJIk91dnJpciIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIkltcG9zc2libGUgZGUgY3LpZXIgbGUgbm91dmVhdSBkb3NzaWVyIDogcGVybWlzc2lvbiByZWZ1c+llLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiRXJyZXVyIGxvcnMgZGUgbGEgY3LpYXRpb24gZHUgbm91dmVhdSBkb3NzaWVyIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGR1IGZpY2hpZXIiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkdSBkb3NzaWVyIgoJSURTX0RFTEVURUlURU1fVEVYVCAiynRlcy12b3VzIHP7ciBkZSB2b3Vsb2lyIHN1cHByaW1lciAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICLKdGVzLXZvdXMgc/t0IGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlcyAlMSBpdGVtcyA/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiyWNyYXNlciBsZSBmaWNoaWVyICUxPyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIkNvbmZpcm1lciBsJ+ljcmFzZW1lbnQgZHUgZmljaGllciIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSJGaWNoaWVyIgoJSURTX1NIVl9DT0xVTU4yCQkiVGFpbGxlIgoJSURTX1NIVl9DT0xVTU4zCQkiVHlwZSIKCUlEU19TSFZfQ09MVU1ONAkJIk1vZGlmaekiCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dHMiCglJRFNfU0hWX0NPTFVNTjYJCSJDYXBhY2l06SIKCUlEU19TSFZfQ09MVU1ONwkJIkVzcGFjZSBkaXNwb25pYmxlIgoJSURTX1NIVl9DT0xVTU44CQkiTm9tIgoJSURTX1NIVl9DT0xVTU45CQkiQ29tbWVudGFpcmVzIgpFTkQKCi8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIlJlZOltYXJyZXIiCiAgICAgICBJRFNfUkVTVEFSVF9QUk9NUFQgICAgICAiVm91bGV6LXZvdXMgc2ltdWxlciBsZSByZWTpbWFycmFnZSBkZSBXaW5kb3dzPyIKICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJBcnLqdGVyIgogICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIlZvdWxlei12b3VzIGZlcm1lciBsYSBzZXNzaW9uIFdpbmU/Igp9CgovKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiBJRFNfUFJPR1JBTVMgICAgICAgICAgICAgICAgIk1lbnUgROltYXJyZXJcXFByb2dyYW1tZXMiCiBJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIk1lcyBkb2N1bWVudHMiCiBJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIkZhdm9yaXMiCiBJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIk1lbnUgROltYXJyZXJcXFByb2dyYW1tZXNcXETpbWFycmFnZSIKIElEU19SRUNFTlQgICAgICAgICAgICAgICAgICAiUmVjZW50IgogSURTX1NFTkRUTyAgICAgICAgICAgICAgICAgICJTZW5kVG8iCiBJRFNfU1RBUlRNRU5VICAgICAgICAgICAgICAgIk1lbnUgROltYXJyZXIiCiBJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIk1hIG11c2lxdWUiCiBJRFNfTVlWSURFTyAgICAgICAgICAgICAgICAgIk1lcyB2aWTpb3MiCiBJRFNfREVTS1RPUERJUkVDVE9SWSAgICAgICAgIkJ1cmVhdSIKIElEU19ORVRIT09EICAgICAgICAgICAgICAgICAiVm9pc2luYWdlIFLpc2VhdSIKIElEU19URU1QTEFURVMgICAgICAgICAgICAgICAiTW9k6GxlcyIKIElEU19BUFBEQVRBICAgICAgICAgICAgICAgICAiQXBwbGljYXRpb24gRGF0YSIKIElEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiVm9pc2luYWdlIGQnaW1wcmVzc2lvbiIKIElEU19MT0NBTF9BUFBEQVRBICAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXEFwcGxpY2F0aW9uIERhdGEiCiBJRFNfSU5URVJORVRfQ0FDSEUgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxUZW1wb3JhcnkgSW50ZXJuZXQgRmlsZXMiCiBJRFNfQ09PS0lFUyAgICAgICAgICAgICAgICAgIkNvb2tpZXMiCiBJRFNfSElTVE9SWSAgICAgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxIaXN0b3JpcXVlIgogSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJQcm9ncmFtIEZpbGVzIgogSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICJNZXMgaW1hZ2VzIgogSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJQcm9ncmFtIEZpbGVzXFxGaWNoaWVycyBjb21tdW5zIgogSURTX0NPTU1PTl9ET0NVTUVOVFMgICAgICAgICJEb2N1bWVudHMiCiBJRFNfQURNSU5UT09MUyAgICAgICAgICAgICAgIk1lbnUgROltYXJyZXJcXFByb2dyYW1tZXNcXE91dGlscyBkJ2FkbWluaXN0cmF0aW9uIgogSURTX0NPTU1PTl9NVVNJQyAgICAgICAgICAgICJEb2N1bWVudHNcXE1hIG11c2lxdWUiCiBJRFNfQ09NTU9OX1BJQ1RVUkVTICAgICAgICAgIkRvY3VtZW50c1xcTWVzIGltYWdlcyIKIElEU19DT01NT05fVklERU8gICAgICAgICAgICAiRG9jdW1lbnRzXFxNZXMgdmlk6W9zIgogSURTX0NEQlVSTl9BUkVBICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcQXBwbGljYXRpb24gRGF0YVxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==