LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIEN6ZWNoIHJlc291cmNlcyBmb3Igd2luZWNvbnNvbGUKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDQgRGF2aWQgS3JlZGJhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ3aW5lY29uc29sZV9yZXMuaCIKCkxBTkdVQUdFIExBTkdfQ1pFQ0gsIFNVQkxBTkdfREVGQVVMVAoKLyogQ3plY2ggc3RyaW5ncyBpbiBDUDEyNTAgKi8KClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJItomcHJhdnkiCklEU19ERUZBVUxULAkJIk5hc3Rhdml0ICZ2/WNob3rtIgpJRFNfUFJPUEVSVElFUywJCSJWJmxhc3Rub3N0aSIKSURTX01BUkssCQkiViZ5YnJhdCIKSURTX0NPUFksCQkiJktvcO1yb3ZhdCIKSURTX1BBU1RFLAkJIlZsJm+eaXQiCklEU19TRUxFQ1RBTEwsCQkiVnkmYnJhdCB2mmUiCklEU19TQ1JPTEwsCQkiUm9sb3ZhJnQiCklEU19TRUFSQ0gsCQkiSGwmZWRhdCIKSURTX0ZOVF9ESVNQTEFZLAkiS2GeZP0gem5hayBqZSAlbGQgcGl4ZWz5IJppcm9r/SBhICVsZCBwaXhlbPkgdnlzb2v9IgpJRFNfRk5UX1BSRVZJRVcsCSJUb3RvIGplIHRlc3QiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICJTZXR1cCAtIERlZmF1bHRu7SBuYXN0YXZlbu0iCklEU19ETEdfVElUX0NVUlJFTlQsICAgICJTZXR1cCAtIFNvdehhc27pIG5hc3RhdmVu7SIKSURTX0RMR19USVRfRVJST1IsCSJDaHliYSBuYXN0YXZlbu0iCklEU19ETEdfRVJSX1NCV0lOU0laRSwJIlrhc29ibu1rIG9icmF6b3ZreSBtdXPtIGL9dCB27HSa7SBuZWJvIHN0ZWpu7CB2ZWxr/SBqYWt64XNvYm7tayBva25hLiIKRU5ECgpJRERfT1BUSU9OIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBWb2xieSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIlZlbGlrb3N0IGt1cnpvcnUiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIk0mYWz9IiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZTdPhlZG7tIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJWZSZsa/0iLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAi2O16ZW7tIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICJQb3B1cCBtZW51IiwgLTEsIDc5LCAyMywgNDAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDdHJsIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIlF1aWNrIGVkaXQgbfNkIiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIlAmb3ZvbGl0IiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiSGlzdG9yaWUgcPjta2F6+SIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJlBv6GV0IHpub3Z1dm9sYW79Y2ggcPjta2F6+SA6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICJPZHN0JnJhbml0IGR1cGxpY2l0eSIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgUO1zbW8gIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICImUO1zbW8iLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICImQmFydmEiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICJWZWxpa28mc3QiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIE5hc3RhdmVu7SAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIk9ibGFzdCB64XNvYm7ta3UiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIort+CZrYSA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZW/ZprYSA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIlZlbGlrb3N0IG9rbmEiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiiu34JmthIDoiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDY4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICJW/ZprJmEgOiIsIC0xLCAxNCwgODMsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9IRUlHSFQsIDY4LCA4MSwgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIktvbmVjIHByb2dyYW11IiwgLTEsIDExNSwgMTEsIDgwLCA0MiwgQlNfR1JPVVBCT1gKCUFVVE9DSEVDS0JPWCAiVXphdvjtdCAma29uem9saSIsIElEQ19DTkZfQ0xPU0VfRVhJVCwgMTE5LCAyNSwgNzUsIDIwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkVkaWNlIiwgLTEsIDExNSwgNTUsIDgwLCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDc1LCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIlBhcmFtZXRyeSBrb256b2xlIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICJaYWNob3ZhdCB0eXRvIHpt7G55IHBybyBkYWya7SBzZXplbu0iLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJVcHJhdml0IHBvdXplIHNvdehhc27pIHNlemVu7SIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAyMCwgNDUsIDM1LCAxMgoJUFVTSEJVVFRPTiAiU3Rvcm5vIiwgSURDQU5DRUwsIDY1LCA0NSwgMzUsIDEyCn0K