LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUKICogQ29weXJpZ2h0IDIwMDMgSXZhbiBMZW8gTXVycmF5LVNtaXRoCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImRmlsZSIgewogICBNRU5VSVRFTSAiJk51b3ZvLi4uIiwgICAgICAgICAgICAgIFBNX05FVwogICBNRU5VSVRFTSAiJkFwcmlcdEludmlvIiwgICAgICAgICAgICAgUE1fT1BFTgogICBNRU5VSVRFTSAiJlNwb3N0YS4uLlx0RjciLCAgICAgICAgICAgICBQTV9NT1ZFLCAgICAgIEdSQVlFRAogICBNRU5VSVRFTSAiJkNvcGlhLi4uXHRGOCIsICAgICAgICAgICAgIFBNX0NPUFksICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImRWxpbWluYVx0RW50ZiIsICAgICAgICAgICBQTV9ERUxFVEUKICAgTUVOVUlURU0gIiZQcm9wcmlldOAuLi5cdEFsdCtJbnZpbyIsICAgICAgIFBNX0FUVFJJQlVURVMKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImRXNlZ3VpLi4uIiwgICAgICAgICAgUE1fRVhFQ1VURQogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZFc2NpIiwgICAgICAgICAgICAgUE1fRVhJVAogfQogUE9QVVAgIiZPcHppb25pIiB7CiAgIE1FTlVJVEVNICImRGlzcG9zaXppb25lIGF1dG9tYXRpY2EiLCAgUE1fQVVUT19BUlJBTkdFCiAgIE1FTlVJVEVNICImUmlkdWNpIGEgaWNvbmEgaW4gZXNlY3V6aW9uZSIsICAgIFBNX01JTl9PTl9SVU4KICAgTUVOVUlURU0gIiZTYWx2YSBpbXBvc3RhemlvbmkgaW4gdXNjaXRhIiwgUE1fU0FWRV9TRVRUSU5HUwogfQogUE9QVVAgIiZGJmluZXN0cmEiIHsKICAgTUVOVUlURU0gIiZTb3ZyYXBwb25pXHRTaGlmdCtGNSIsICAgICAgIFBNX09WRVJMQVAKICAgTUVOVUlURU0gIiZBJmZmaWFuY2FcdFNoaWZ0K0Y0IiwgIFBNX1NJREVfQllfU0lERQogICBNRU5VSVRFTSAiJkRpc3BvbmkgaWNvbmUiLCAgICAgICBQTV9BUlJBTkdFCiB9CiAKUE9QVVAgIiZBaXV0byIgewogICBNRU5VSVRFTSAiJlNvbW1hcmlvIiwgICAgICAgICBQTV9DT05URU5UUwogICBNRU5VSVRFTSAiJlJpY2VyY2EuLi4iLCAgICAgICAgICAgUE1fU0VBUkNICiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFpdXRvIHN1bGxhIEd1aWRhIiwgICAgIFBNX0hFTFBPTkhFTFAKICAgTUVOVUlURU0gIiZUdXRvcmlhbCIsICAgICAgICAgUE1fVFVUT1JJQUwKICAgTUVOVUlURU0gU0VQQVJBVE9SCgogICBQT1BVUCAiJkluZm9ybWF6aW9uaSBzdWwgUHJvZ3JhbSBNYW5hZ2VyIiB7CiAgICAgTUVOVUlURU0gIiZMaWNlbnphIiwgICAgICAgIFBNX0xJQ0VOU0UKICAgICBNRU5VSVRFTSAiJkdhcmFuemlhIiwgICAgUE1fTk9fV0FSUkFOVFkKICAgICBNRU5VSVRFTSAiJkluZm9ybWF6aW9uaSBzdSBXSU5FIiwgICAgIFBNX0FCT1VUX1dJTkUKICAgfQogfQp9CgovKiBEaWFsb2cgYE5ldycgKi8KCkRJQUxPR19ORVcgRElBTE9HIDAsIDAsIDE3MCwgNjUKTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRQpDQVBUSU9OICJOdW92byIKewpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX0dST1VQLCAgICAxMCwgMTUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJkdydXBwbyBkaSBwcm9ncmFtbWkiLCAgIFBNX05FV19HUk9VUCwgICAgMjAsIDE4LCAgODAsIDE1ClJBRElPQlVUVE9OICAgIiIsICAgICAgICAgICAgICAgICBQTV9ORVdfUFJPR1JBTSwgIDEwLCAzNSwgIDEwLCAxNQpMVEVYVCAgICAgICAgICImUHJvZ3JhbW1hIiwgUE1fTkVXX1BST0dSQU0sICAyMCwgMzgsICA4MCwgMTUKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICBJRE9LLCAgICAgICAgICAgMTA1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGxhIiwgICAgICBJRENBTkNFTCwgICAgICAgMTA1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQWl1dG8iLCAgICAgICAgUE1fSEVMUCwgICAgICAgIDEwNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBNb3ZlJyAqLwoKRElBTE9HX01PVkUgRElBTE9HIDAsIDAsIDI1MCwgNjUKTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRQpDQVBUSU9OICJNb3ZlIFByb2dyYW0iCnsKTFRFWFQgICAgICAgICAiU3Bvc3RhIHByb2dyYW1tYToiLCAgICBJRElHTk9SRSwgICAgICAgICAgICA1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIFBNX1BST0dSQU0sICAgICAgICAgOTUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIkRhbCBncnVwcG86IiwgSURJR05PUkUsICAgICAgICAgICAgNSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICAgIDk1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICImQWwgZ3J1cHBvOiIsICAgUE1fVE9fR1JPVVBfVFhULCAgICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxsYSIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaXV0byIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBDb3B5JyAqLwoKRElBTE9HX0NPUFkgRElBTE9HIDAsIDAsIDI1MCwgNjUKTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRQpDQVBUSU9OICJDb3B5IFByb2dyYW0iCnsKTFRFWFQgICAgICAgICAiQ29waWEgcHJvZ3JhbW1hOiIsICAgIElESUdOT1JFLCAgICAgICAgICAgIDUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgUE1fUFJPR1JBTSwgICAgICAgICA5NSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiRGFsIGdydXBwbzoiLCBJRElHTk9SRSwgICAgICAgICAgICA1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIFBNX0ZST01fR1JPVVAsICAgICAgOTUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZBbCBncm91cHBvOiIsICAgUE1fVE9fR1JPVVBfVFhULCAgICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxsYSIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaXV0byIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBHcm91cCBhdHRyaWJ1dGVzJyAqLwoKRElBTE9HX0dST1VQIERJQUxPRyAwLCAwLCAyMzAsIDY1CkxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19ERUZBVUxUClNUWUxFIERTX01PREFMRlJBTUUKQ0FQVElPTiAiUHJvcHJpZXTgIGRlbCBncnVwcG8gZGkgUHJvZ3JhbW1pIgp7CkxURVhUICAgICAiJkRlc2NyaXppb25lOiIsIFBNX0RFU0NSSVBUSU9OX1RYVCwgICAwNSwgMTgsICA1MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDYwLCAxOCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgIiZGaWxlIGRpIGdydXBwbzoiLCAgICAgICAgUE1fRklMRV9UWFQsICAgICAgICAgIDA1LCAzOCwgIDUwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9GSUxFLCAgICAgICAgICAgICAgNjAsIDM4LCAgOTAsIDE1LCBXU19UQUJTVE9QCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAxNTUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsbGEiLCAgICAgICAgSURDQU5DRUwsICAgICAgICAgICAgMTU1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQWl1dG8iLCAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgICAxNTUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgUHJvZ3JhbSBhdHRyaWJ1dGVzJyAqLwoKRElBTE9HX1BST0dSQU0gRElBTE9HIDAsIDAsIDI1MCwgMTA1CkxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19ERUZBVUxUClNUWUxFIERTX01PREFMRlJBTUUKQ0FQVElPTiAiUHJvcHJpZXTgIGRlbCBwcm9ncmFtbWEiCnsKTFRFWFQgICAgICAgICAiJkRlc2NyaXppb25lOiIsICBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDEwLCAgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9ERVNDUklQVElPTiwgICAgICAgODAsIDEwLCAgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIiZMaW5lYSBkaSBjb21hbmRvOiIsIFBNX0NPTU1BTkRfTElORV9UWFQsICAwNSwgMjUsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkRfTElORSwgICAgICA4MCwgMjUsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJkRpcmVjdG9yeSBkaSAmbGF2b3JvOiIsICAgIFBNX0RJUkVDVE9SWV9UWFQsICAgICAwNSwgNDAsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RJUkVDVE9SWSwgICAgICAgICA4MCwgNDAsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJlRhc3RvIGRpIHNjZWx0YSByYXBpZGE6IiwgICAgICBQTV9IT1RfS0VZX1RYVCwgICAgICAgMDUsIDU1LCAgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9IT1RfS0VZLCAgICAgICAgICAgODAsIDU1LCAgOTAsIDE1LCBXU19UQUJTVE9QCklDT04gICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OLCAgICAgICAgICAgICAgMjAsIDcwCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAgICAgICAgICAgODAsIDc1LCAgMTAsIDEwLCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIiZBdnZpYSByaWRvdHRvIGEgaWNvbmEiLCAgICAgICBJRElHTk9SRSwgICAgICAgICAgICAgOTUsIDc1LCAgNzUsIDEwCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgMTg1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGxhIiwgICAgICAgICAgICAgICBJRENBTkNFTCwgICAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZUcm92YS4uLiIsICAgICAgICAgICAgICAgUE1fQlJPV1NFLCAgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQ2FtYmlhIGljb25hLi4uIiwgUE1fT1RIRVJfU1lNQk9MLCAgICAgMTg1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQWl1dG8iLCAgICAgICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTg1LCA4NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYFN5bWJvbCcgKi8KCkRJQUxPR19TWU1CT0wgRElBTE9HIDAsIDAsIDIwMCwgODUKTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRQpDQVBUSU9OICJDYW1iaWEgaWNvbmEiCnsKTFRFWFQgICAgICImTm9tZSBkZWwgZmlsZToiLCAgICBQTV9JQ09OX0ZJTEVfVFhULCAgICA1LCAxNSwgIDQwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OX0ZJTEUsICAgICAgIDQ1LCAxNSwgIDg1LCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgIkkmY29uYSBjb3JyZW50ZToiLCBQTV9TWU1CT0xfTElTVF9UWFQsICA1LCAzMCwgMTI1LCAxMApDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0xfTElTVCwgICAgICA1LCA0MCwgMTI1LCA1MCwKICAgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19PV05FUkRSQVdGSVhFRCB8IFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsbGEiLCAgICAgSURDQU5DRUwsICAgICAgICAgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkNlcmNhLi4uIiwgICAgUE1fQlJPV1NFLCAgICAgICAgIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFpdXRvIiwgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBFeGVjdXRlJyAqLwoKRElBTE9HX0VYRUNVVEUgRElBTE9HIDAsIDAsIDIwMCwgODUKTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRQpDQVBUSU9OICJFc2VndWkgcHJvZ3JhbW1hIgp7CkxURVhUICAgICAiJkxpbmVhIGRpIGNvbWFuZG86IiwgSURJR05PUkUsICAgMDUsIDE1LCAxMjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkQsIDA1LCAyNSwgMTIwLCAxNSwgV1NfVEFCU1RPUApDSEVDS0JPWCAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAwNSwgNDUsICAxMCwgMTAsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJkF2dmlhIHJpZG90dG8gYSBpY29uYSIsICAgSURJR05PUkUsICAgMjAsIDQ1LCAxMjAsIDEwCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICAgICBJRE9LLCAgICAgIDEzNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxsYSIsICAgICAgICAgICBJRENBTkNFTCwgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkNlcmNhLi4uIiwgICAgICAgICAgUE1fQlJPV1NFLCAxMzUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaXV0byIsICAgICAgICAgICAgIFBNX0hFTFAsICAgMTM1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfREVGQVVMVAp7CklEU19QUk9HUkFNX01BTkFHRVIsCQkiUHJvZ3JhbSBNYW5hZ2VyIgpJRFNfRVJST1IsCQkJIkVSUk9SRSIKSURTX1dBUk5JTkcsCQkJIkFUVEVOWk9ORSIKSURTX0lORk8sCQkJIkluZm9ybWF6aW9uaSIKSURTX0RFTEVURSwJCQkiRWxpbWluYSIKSURTX0RFTEVURV9HUk9VUF9zLAkJIkVsaW1pbmFyZSBpbCBncnVwcG8gYCVzJyA/IgpJRFNfREVMRVRFX1BST0dSQU1fcywJCSJFbGltaW5hcmUgYCVzJyA/IgpJRFNfTk9UX0lNUExFTUVOVEVELAkJIk5vbiBpbXBsZW1lbnRhdG8iCklEU19GSUxFX1JFQURfRVJST1JfcywJCSJFcnJvcmUgZGkgbGV0dHVyYSBgJXMnLiIKSURTX0ZJTEVfV1JJVEVfRVJST1JfcywJCSJFcnJvcmUgZGkgc2NyaXR0dXJhIGAlcycuIgpJRFNfR1JQRklMRV9SRUFEX0VSUk9SX3MsCSJcCklsIGZpbGUgZGkgZ3J1cHBvIGAlcycgbm9uIHB1bycgZXNzZXJlIGFwZXJ0by5cblwKUHJvdmFyZSBhZCBhcHJpcmxvIGluIGZ1dHVybz8iCklEU19PVVRfT0ZfTUVNT1JZLAkJIk1lbW9yaWEgZXNhdXJpdGEiCklEU19XSU5IRUxQX0VSUk9SLAkJIkd1aWRhIG5vbiBkaXNwb25pYmlsZSIKSURTX1VOS05PV05fRkVBVFVSRV9zLAkJIkZ1bnppb25lIHNjb25vc2NpdXRhIG5lbCBmaWxlICVzIgpJRFNfRklMRV9OT1RfT1ZFUldSSVRURU5fcywJIklsIGZpbGUgYCVzJyBlc2lzdGUuIE5vbiBzb3ZyYXNjcml0dG8uIgpJRFNfU0FWRV9HUk9VUF9BU19zLAkJIlNhbHZhcmUgaWwgZ3J1cHBvIGNvbWUgYCVzJyBwZXIgbm9uIHNvdnJhc2NyaXZlcmUgaSBmaWxlIG9yaWdpbmFsaSIKSURTX05PX0hPVF9LRVksCQkJIk5lc3N1bm8iCklEU19BTExfRklMRVMsCQkJIlR1dHRpIGkgZmlsZSAoKi4qKSIKSURTX1BST0dSQU1TLAkJCSJQcm9ncmFtbWkiCklEU19MSUJSQVJJRVNfRExMLAkJIkxpYnJlcmllICgqLmRsbCkiCklEU19TWU1CT0xfRklMRVMsCQkiRmlsZSBpY29uYSIKSURTX1NZTUJPTFNfSUNPLAkJIkljb25lICgqLmljbykiCn0K