LyoKICogQ29weXJpZ2h0IDIwMDUgSmFjZWsgQ2FiYW4KICogQ29weXJpZ2h0IDIwMDUsMjAwNiwyMDA3IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfSFRNTERJU0FCTEVEICAgICJIVE1MILe7tPW4tcC6IMf2wOcgsKG0ycfPwfYgvsrAvS4iCiAgICBJRFNfSFRNTERPQ1VNRU5UICAgICJIVE1MILmuvK0iCiAgIElEU19ET1dOTE9BRElORyAgICAgIrTZv+63zrXlIMHfLi4uIgogICBJRFNfSU5TVEFMTElORyAgICAgICK8s8ShIMHfLi4uIgp9CgpJRF9EV0xfRElBTE9HIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19DRU5URVIgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJXaW5lIEdlY2tvILyzxKEgx66x17iyIgpGT05UIDksICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICJXaW5lIGNvdWxkIG5vdCBmaW5kIGEgR2Vja28gcGFja2FnZSB3aGljaCBpcyBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyBlbWJlZGRpbmcgSFRNTCAiIFwKICAgICAgICAgICJ0byB3b3JrIGNvcnJlY3RseS4gV2luZSBjYW4gYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgaW5zdGFsbCBpdCBmb3IgeW91LlxuXG4iIFwKICAgICAgICAgICJOb3RlOiBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBkaXN0cm8gcGFja2FnZXMgaW5zdGVhZC4gU2VlIGh0dHA6Ly93aWtpLndpbmVocS5vcmcvR2Vja28gZm9yIGRldGFpbHMuIiwKICAgICAgICAgIElEX0RXTF9TVEFUVVMsIDEwLCAxMCwgMjQwLCA1MCwgU1NfTEVGVAogICBDT05UUk9MICLB+Mfgwd8iLCBJRF9EV0xfUFJPR1JFU1MsIFBST0dSRVNTX0NMQVNTQSwgV1NfQk9SREVSfFBCU19TTU9PVEgsIDEwLCA0MCwgMjQwLCAxMgogICBERUZQVVNIQlVUVE9OICK8s8ShKCZJKSIsIElEX0RXTF9JTlNUQUxMLCAyMDAsIDcwLCA1MCwgMTUsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICBQVVNIQlVUVE9OICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAxNDAsIDcwLCA1MCwgMTUsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAp9CgpJRERfSFlQRVJMSU5LIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAix8/AzMbbuLXFqSIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAix8/AzMbbuLXFqSDBpLq4IiwgLTEsIDUsIDUsIDE5MCwgNTUKCUxURVhUICLH/L3EKCZUKToiLCAtMSwgMTAsIDIyLCAyNCwgMTAKCUNPTUJPQk9YIElEQ19UWVBFLCAzNSwgMjAsIDQ1LCAxMDAsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBDQlNfRFJPUERPV05MSVNUIHwgCUNCU19IQVNTVFJJTkdTCglMVEVYVCAiwda80igmVSk6IiwgLTEsIDEwLCA0MiwgMjQsIDEwCglFRElUVEVYVCBJRENfVVJMLCAzNSwgNDAsIDE1MCwgMTQsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgMjAwLCAxMCwgNDUsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDIwMCwgMjgsIDQ1LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0KCklEX1BST01QVF9ESUFMT0cgRElBTE9HIDAsIDAsIDIwMCwgOTAKU1RZTEUgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICIiLCBJRF9QUk9NUFRfUFJPTVBULCAxMCwgMTAsIDE4MCwgMzAKCUVESVRURVhUIElEX1BST01QVF9FRElULCAxMCwgNDUsIDE4MCwgMTQsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgNDAsIDY1LCA0NSwgMTUsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKCVBVU0hCVVRUT04gIsPrvNIiLCBJRENBTkNFTCwgMTE1LCA2NSwgNDUsIDE1LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQo=