LyoKICogV2luZWNvbnNvbGUgcmVzb3VyY2VzIC0gRXNwZXJhbnRvIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDYgQW50b25pbyBDb2RhenppCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ3aW5lY29uc29sZV9yZXMuaCIKCkxBTkdVQUdFIExBTkdfRVNQRVJBTlRPLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIiZSZWRha3R1IgpJRFNfREVGQVVMVCwJCSJBZ29yZHUgJkRlZmH9bHRvam4iCklEU19QUk9QRVJUSUVTLAkJIkUmY29qIgpJRFNfTUFSSywJCSImUHVua3RvIgpJRFNfQ09QWSwJCSImS29waXUiCklEU19QQVNURSwJCSJFbiZtZXR1IgpJRFNfU0VMRUNUQUxMLAkJIiZFbGVrdG9uIOZpb24iCklEU19TQ1JPTEwsCQkiJlJ1bGn4dSIKSURTX1NFQVJDSCwJCSImU2Vy5nUiCklEU19GTlRfRElTUExBWSwJIlRpcG8gZXN0YXMgbGFy+GEgJWxkIGJpbGRlcm9qbiBrYWogYWx0YSAlbGQgYmlsZGVyb2puIgpJRFNfRk5UX1BSRVZJRVcsCSLGaSB0aXUgZXN0YXMgcHJvdm8iCklEU19ETEdfVElUX0RFRkFVTFQsICAgICJEZWZh/Wx0YWogQWdvcmRvaiIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIk51bmFqIEFnb3Jkb2oiCklEU19ETEdfVElUX0VSUk9SLAkiRXJvcm8gZGUgYWdvcmRhZG8iCklEU19ETEdfRVJSX1NCV0lOU0laRSwJIkVrcmFuLWJ1ZnJhIGdyYW5kZWNvIGRldmFzIGVzdGkgcGxpIGdyYW5kYSBh/SBlZ2FsYSBvbCBmZW5lc3RyLWJ1ZnJhIHRpdSIKRU5ECgpJRERfT1BUSU9OIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBPcGNpb2ogIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJLdXJzb3ItZ3JhbmRlem8iLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIiZFdGEiLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJk1lemEiLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE0LCAzMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZMYXL4YSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJSZWdhZG8iLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIkFwZXJhIG1lbnVvIiwgLTEsIDc5LCAyMywgNDAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIlJhcGlkYSBSZWRha3RhZG8iLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJmthcGFibGlndSIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIktyb25vbG9naW8iLCAtMSwgMTAsIDU3LCAxOTAsIDM1LCBCU19HUk9VUEJPWAoJTFRFWFQgIiZOb21icm8gZGEgcGx1cmZvamUgdm9raXRhaiBrb21hbmRvaiA6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICImRm9yaWd1IGR1b2JsYbxvam4iLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDUwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIFRpcGFybyAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJTFRFWFQgIiZUaXBhcm8iLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICImS29sb3JvIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJkdyYW5kZWNvIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBBZ29yZG9qICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiQnVmcm8iLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIiZMYXL4ZWNvIDoiLCAtMSwgMTQsIDI1LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9XSURUSCwgNjgsIDIzLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiJkFsdGVjbyA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIkZlbmVzdHJvIiwgLTEsIDEwLCA1NSwgMTAwLCA0MgoJTFRFWFQgIkxhJnL4ZWNvIDoiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDY4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICJBbCZ0ZWNvIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJQcm9ncmFtZmlubyIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIiZGZXJtdSB0ZXJtaW5hbG9uIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiUmVkYWt0YWRvIiwgLTEsIDExNSwgNTUsIDgwLCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDc1LCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIlRlcm1pbmFsYSBwYXJhbWV0b2oiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIiIsIC0xLCAxMCwgMTAsIDEyMCwgMzEsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIktvbnNlcnZ1IOZpIHRpdWpuIGFnb3JkYWRvam4iLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJNb2RpZnUgbnVyIG51bmFuIHNlc2lvbiIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiQm9uZSIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICJSZXppZ25pIiwgSURDQU5DRUwsIDY1LCA0NSwgMzUsIDEyCn0K