LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLDIwMDQgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICJJY29ub3MgJnBlcXVl8W9zIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0YWxsZXMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCIiCglCRUdJTgoJICBQT1BVUCAiJlZlciIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwgICAgIEZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIkljb25vcyAmcGVxdWXxb3MiLCAgICBGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0YSIsICAgICAgICAgICAgICBGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFsbGVzIiwgICAgICAgICAgIEZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk9yZGVuYXIgJmljb25vcyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUG9yICZub21icmUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBvciAmdGlwbyIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiUG9yIHQmYW1h8W8iLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQb3IgJmZlY2hhIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImT3JkZW5hciBhdXRvbeF0aWNhbWVudGUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJBbGluZWFyIGljb25vcyIsCQlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkFjdHVhbGl6YXIiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJQZWdhciIsCQkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiUGVnYXIgYWNjZXNvIGRpcmVjdG8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk51ZXZvIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOdWV2YSAmY2FycGV0YSIsCQlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk51ZXZvICZhY2Nlc28gZGlyZWN0byIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlByb3BpZWRhZGVzIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIkUmeHBsb3JhciIsCQkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIiZBYnJpciIsCQkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDJm9ydGFyIiwJCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICImQ29waWFyIiwJCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkMmcmVhciBhY2Nlc28gZGlyZWN0byIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImRWxpbWluYXIiLAkJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIlJlJm5vbWJyYXIiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZQcm9waWVkYWRlcyIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAiRXhwbG9yYXIgY2FycGV0YSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBY2VyY2EgZGUgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCBJRE9LLCAxNTMsIDEzMCwgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDE4OSwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgOCwgMTAsIDEzNywgMzMKIExURVhUICJXaW5lIGVzdOEgZGlzcG9uaWJsZSBncmFjaWFzIGE6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiSW50cm9kdXpjYSBlbCBub21icmUgZGUgdW4gcHJvZ3JhbWEsIGNhcnBldGEsIGRvY3VtZW50byBvIHJlY3Vyc28gZGUgSW50ZXJuZXQsIHkgV2luZSBsbyBhYnJpcuEgcGFyYSB1c3RlZC4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJkFicmlyOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJkV4YW1pbmFyLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgovKgoJc3BlY2lhbCBmb2xkZXJzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19ERVNLVE9QCQkiRXNjcml0b3JpbyIKCUlEU19NWUNPTVBVVEVSCQkiTWkgUEMiCn0KCi8qCgljb250ZXh0IG1lbnVzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19WSUVXX0xBUkdFCQkiSWNvbm9zICZncmFuZGVzIgoJSURTX1ZJRVdfU01BTEwJCSJJY29ub3MgJnBlcXVl8W9zIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0YSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXRhbGxlcyIKCUlEU19TRUxFQ1QJCSJTZWxlY2Npb25hciIKCUlEU19PUEVOCQkiQWJyaXIiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJObyBzZSBwdWVkZSBjcmVhciBudWV2YSBjYXJwZXRhOiBQZXJtaXNvIGRlbmVnYWRvLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiRXJyb3IgZHVyYW50ZSBsYSBjcmVhY2nzbiBkZSB1bmEgbnVldmEgY2FycGV0YSIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIkNvbmZpcm1hciBlbGltaW5hY2nzbiBkZSBhcmNoaXZvIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJDb25maXJtYXIgZWxpbWluYWNp824gZGUgY2FycGV0YSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGVzdG9zICUxIGVsZW1lbnRvcz8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICK/U29icmVlc2NyaWJpciBlbCBhcmNoaXZvICclMSc/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQ29uZmlybWFyIHNvYnJlZXNjcml0dXJhIGRlIGFyY2hpdm8iCn0KCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xICAgICAgICAgIkFyY2hpdm8iCglJRFNfU0hWX0NPTFVNTjIgICAgICAgICAiVGFtYfFvIgoJSURTX1NIVl9DT0xVTU4zICAgICAgICAgIlRpcG8iCglJRFNfU0hWX0NPTFVNTjQgICAgICAgICAiTW9kaWZpY2FkbyIKCUlEU19TSFZfQ09MVU1ONSAgICAgICAgICJBdHJpYnV0b3MiCglJRFNfU0hWX0NPTFVNTjYgICAgICAgICAiVGFtYfFvIgoJSURTX1NIVl9DT0xVTU43ICAgICAgICAgIlRhbWHxbyBkaXNwb25pYmxlIgoJSURTX1NIVl9DT0xVTU44ICAgICAgICAgIk5vbWJyZSIKCUlEU19TSFZfQ09MVU1OOSAgICAgICAgICJDb21lbnRhcmlvcyIKRU5ECgovKiBtZXNzYWdlIGJveCBzdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19SRVNUQVJUX1RJVExFCSJSZWluaWNpYXIiCglJRFNfUkVTVEFSVF9QUk9NUFQJIr9EZXNlYSBzaW11bGFyIHVuIHJlaW5pY2lvIGRlIFdpbmRvd3M/IgoJSURTX1NIVVRET1dOX1RJVExFCSJBcGFnYXIiCglJRFNfU0hVVERPV05fUFJPTVBUCSK/RGVzZWEgdGVybWluYXIgc3Ugc2VzafNuIFdpbmU/Igp9Cg==