LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDUsMjAwNyBZdW5Tb25nIEh3YW5nCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIsbtwf0oJkUpIgpJRFNfREVGQVVMVCwJCSKx4rq7wLi3ziC8s8GkKCZEKSIKSURTX1BST1BFUlRJRVMsCQkivNO8uigmUCkiCklEU19NQVJLLAkJIiZNYXJrIgpJRFNfQ09QWSwJCSK6ubvnKCZDKSIKSURTX1BBU1RFLAkJIrrZv6mz1rHiKCZQKSIKSURTX1NFTEVDVEFMTCwJCSK48LXOILyxxcMoJlMpIgpJRFNfU0NST0xMLAkJIr26xam30SgmUikiCklEU19TRUFSQ0gsCQkiw6Ox4igmRSkiCklEU19GTlRfRElTUExBWSwJIrCisKLAxyCx28DatMIgJWxkICDHyLy/ILPKuvG/oSAlbGQgx8i8vyCz9MDMuKYgsKHB/bTPtNkiCklEU19GTlRfUFJFVklFV18xLAkiwMywzcC6IMXXvbrGrsDUtM+02SIKSURTX0ZOVF9QUkVWSUVXXzIsCSIiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICK8s8ShIC0gseK6uyC8s8GkIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAivLPEoSAtIMf2wOcgvLPBpCIKSURTX0RMR19USVRfRVJST1IsCSK8s8GkIL+ht68iCklEU19ETEdfRVJSX1NCV0lOU0laRSwgCSK9usWpuLAgufbG2yDFqbHitMIgud215b3DIMOiuri02SCwsLDFs6ogxL++38fVtM+02S4iCgpJRFNfQ01EX0lOVkFMSURfRVZFTlRfSUQgICJ3aW5lY29uc29sZTogwMy6pcauIGlkuKYgutm/qSCz1sC7ILz2IL74vcC0z7TZXG4iCklEU19DTURfSU5WQUxJRF9CQUNLRU5EICAgICJ3aW5lY29uc29sZTogv8O52bijwfYgvsrAuiC56b+jteVcbiIKSURTX0NNRF9JTlZBTElEX09QVElPTiAgICAid2luZWNvbnNvbGU6IMDMx9jH0rz2IL74tMIguO23ySC288DOIL/JvMdcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIldpbmUgxNy81r+hvK0gx8G3zrHXt6UgvcPA21xuIgpJRFNfQ01EX0xBVU5DSF9GQUlMRUQgICAgICAid2luZWNvbnNvbGU6IMeusde4siAlcyC9w8DbIL3HxtAuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiwMwguO23ycC6IL/Dudm4o8H2IL7KvcC0z7TZLlxuIgoKSURTX1VTQUdFX0hFQURFUiAgICAgICAgICAgIlxuu+e/67n9OlxuICB3aW5lY29uc29sZSBbv8m8x10gPLjtt8k+XG5cbr/JvMc6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICC757/rwNqwoSC79SDDosC7IL+tILDNwM7B9ixcbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzsKEgV2luZSDE3LzWw7O3syDH9sDnIMXNucyzzr+hICCzqsW4s74gsM3AzsH2ILyxxcNcbiIKSURTX1VTQUdFX0NPTU1BTkQgICAgICAgICAgIiAgPLjtt8k+ICAgICAgICAgICAgICAgICBUaGUgV2luZSDHwbfOsde3pcC6IMTcvNbAuyDF68fYvK0gvcPA27XKXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbr+5OlxuICB3aW5lY29uc29sZSBjbWRcbldpbmUgxNy81r+hvK0gV2luZSC47bfJIMfBt9LHwcauIL3DwNtcblxuIgoKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIL/JvMcgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICLEv7ytIMWpseIiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIsDbsNQoJlMpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIsHfsKMoJk0pIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICLFqbDUKCZMKSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLEwcaut9EiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIsbLvvcguN60uiIsIC0xLCA3OSwgMjMsIDQwLCAxMAoJQVVUT0NIRUNLQk9YICLEwcaut9EoJkMpIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICK9rMfBxq4oJkgpIiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICK6/LilIMbtwf0iLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAisKG0ySgmRSkiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOSwgNDMsIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK47bfJIMj3vbrF5LiuIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICK02b3DILrOuKO0wiC47bfJwMcgsLm89igmTik6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICK1zrn4ICDBprDFKCZSKSIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiCx27LDICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAisduywygmRikiLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICK79rvzKCZDKSIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIsWpseI7KCZTKSIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiC8s8GkICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiufbG2yDBuCIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAis8q68SgmVykgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICKz9MDMKCZIKSA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIsOiIMWpseIiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAis8q68SgmSSkgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIrP0wMwoJkUpIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLHrrHXuLLAxyCzoSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIsTcvNYgtN2x4igmQykiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDcyLCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK/obXwvMciLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzIsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAyMCwgMjAsIDE3MCwgNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTgpDQVBUSU9OICIgxNy81iC4xbCzuq+89iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTUwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAis6rB38DHILy8vMfAuyDAp8fYILyzwaQgurjBuCIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxNDAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIr/Awfcgx/bA58DHILy8vMe4uCC6r7DmIiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMjcsIDE0MCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgMzUsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIsPrvNIiLCBJRENBTkNFTCwgODAsIDQ1LCAzNSwgMTIKfQo=