LyoKICogd2luZWNvbnNvbGUgKER1dGNoIHJlc291cmNlcykKICogCiAqIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqIENvcHlyaWdodCAyMDA4IEZyYW5zIEtvb2wKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmVjb25zb2xlX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQpCRUdJTgpJRFNfRURJVCwJCSImQmV3ZXJrZW4iCklEU19ERUZBVUxULAkJIiZTdGFuZGFhcmRpbnN0ZWxsaW5nZW4iCklEU19QUk9QRVJUSUVTLAkJIiZFaWdlbnNjaGFwcGVuIgpJRFNfTUFSSywJCSImTWFya2VyZW4iCklEU19DT1BZLAkJIiZLb3Bp63JlbiIKSURTX1BBU1RFLAkJIiZQbGFra2VuIgpJRFNfU0VMRUNUQUxMLAkJIiZBbGxlcyBzZWxlY3RlcmVuIgpJRFNfU0NST0xMLAkJIlNjJnJvbGxlbiIKSURTX1NFQVJDSCwJCSImWm9la2VuIgpJRFNfRk5UX0RJU1BMQVksCSJFbGsga2FyYWt0ZXIgaXMgJWxkIHBpeGVscyBicmVlZCBlbiAlbGQgcGl4ZWxzIGhvb2ciCklEU19GTlRfUFJFVklFVywJIkRpdCBpcyBlZW4gdGVzdCIKSURTX0RMR19USVRfREVGQVVMVCwgICAgIkNvbmZpZ3VyYXRpZSAtIHN0YW5kYWFyZCBpbnN0ZWxsbGluZ2VuIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAiQ29uZmlndXJhdGllIC0gaHVpZGlnZSBpbnN0ZWxsaW5nZW4iCklEU19ETEdfVElUX0VSUk9SLAkiQ29uZmlndXJhdGllZm91dCIKSURTX0RMR19FUlJfU0JXSU5TSVpFLAkiRGUgc2NoZXJtYnVmZmVyIG1vZXQgZ3JvdGVyIGRhbiBvZiBnZWxpamsgemlqbiBhYW4gZGUgdmVuc3RlcmJ1ZmZlciIKCklEU19DTURfSU5WQUxJRF9FVkVOVF9JRCAgICJ3aW5lY29uc29sZTogRm91dCBpbiB2ZXJ3ZXJrZW4gZ2ViZXVydGVuaXMgaWRcbiIKSURTX0NNRF9JTlZBTElEX0JBQ0tFTkQgICAgIndpbmVjb25zb2xlOiBPbmp1aXN0ZSBiYWNrZW5kXG4iCklEU19DTURfSU5WQUxJRF9PUFRJT04gICAgICJ3aW5lY29uc29sZTogTmlldCBoZXJrZW5kZSBvcGRyYWNodHJlZ2VsIG9wdGllXG4iCklEU19DTURfQUJPVVQgICAgICAgICAgICAgICJEaXQgc3RhcnQgZWVuIHByb2dyYW1tYSBpbiBlZW4gV2luZSBjb25zb2xlLW9tZ2V2aW5nXG4iCklEU19DTURfTEFVTkNIX0ZBSUxFRCAgICAgICJ3aW5lY29uc29sZTogU3RhcnRlbiB2YW4gcHJvZ3JhbW1hICVzIG1pc2x1a3QuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGV0IGNvbW1hbmRvIGlzIG9uanVpc3QuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG5HZWJydWlrOlxuICB3aW5lY29uc29sZSBbb3B0aWVzXSA8Y29tbWFuZG8+XG5cbk9wdGllczpcbiIKSURTX1VTQUdFX0JBQ0tFTkQgICAgICAgICAgIiAgLS1iYWNrZW5kPXt1c2VyfGN1cnNlc30gIEtpZXplbiB2b29yIHVzZXIgemFsIGVlbiBuaWV1dyB3aW5kb3cgZG9lbiB2ZXJzY2hpam5lbixcbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzIHphbCBwcm9iZXJlbiBkZSBodWlkaWdlIHRlcm1pbmFsIG9tIHRlIHpldHRlblxuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBlZW4gV2luZSBjb25zb2xlXG4iCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDxjb21tYW5kbz4gICAgICAgICAgICAgICAgSGV0IFdpbmUgcHJvZ3JhbW1hIGRhdCB6YWwgc3RhcnRlbiBpbiBkZSBXaW5lIGNvbnNvbGVcbiIKSURTX1VTQUdFX0ZPT1RFUiAgICAgICAgICAgIlxuVm9vcmJlZWxkOlxuICB3aW5lY29uc29sZSBjbWRcblN0YXJ0IGRlIFdpbmUgY29tbWFuZCBwcm9tcHQgaW4gZWVuIFdpbmUgY29uc29sZVxuXG4iCgpFTkQKCklERF9PUFRJT04gRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIE9wdGllcyAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIkN1cnNvcmdyb290dGUiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIiZLbGVpbiIsIElEQ19PUFRfQ1VSU09SX1NNQUxMLCAxNCwgMjMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImTWlkZGVsIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImR3Jvb3QiLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiQ29udHJvbGUiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIlBvcHVwIG1lbnUiLCAtMSwgNzksIDIzLCA0MCwgMTAKCUFVVE9DSEVDS0JPWCAiJkNvbnRyb2wiLCBJRENfT1BUX0NPTkZfQ1RSTCwgMTI5LCAyMywgNjAsIDEwLCBXU19UQUJTVE9QCglBVVRPQ0hFQ0tCT1ggIlMmaGlmdCIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiU25lbCBiZXdlcmtlbiIsIC0xLCA3OSwgNDMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICImYWFuIiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiR2VzY2hpZWRlbmlzIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICImQWFudGFsIHRlIGJld2FyZW4gb3BkcmFjaHRlbiA6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICImVmVyd2lqZGVyIGR1YmJlbGVuIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDY3LCA1MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBMZXR0ZXJ0eXBlICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAiJkxldHRlcnR5cGUiLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICImS2xldXIiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICImR3Jvb3R0ZSIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgQ29uZmlndXJhdGllICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiQnVmZmVyem9uZSIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAiJkJyZWVkdGUgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICImSG9vZ3RlIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiVmVuc3Rlcmdyb290dGUiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiQiZyZWVkdGUgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIkgmb29ndGUgOiIsIC0xLCAxNCwgODMsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9IRUlHSFQsIDY4LCA4MSwgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIlByb2dyYW1tYSBpcyBiZetpbmRpZ2QiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICImQ29uc29sZSBhZnNsdWl0ZW4iLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJWZXJzaWUiLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzUsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgMjAsIDIwLCAxNDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiQ29uc29sZSBwYXJhbWV0ZXJzIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICJCZXdhYXIgZGV6ZSBpbnN0ZWxsaW5nZW4gdm9vciBsYXRlcmUgc2Vzc2llcyIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxMTAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIldpanppZyBhbGxlZW4gZGUgaHVpZGlnZSBzZXNzaWUiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTEwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIk9LIiwgSURPSywgMjAsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIkFubnVsZXJlbiIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==