LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDIgWm9seSBOYWd5CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSFVOR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIiZTemVya2VzenTpcyIKSURTX0RFRkFVTFQsCQkiQWxhJnDpcnTpa2VrIgpJRFNfUFJPUEVSVElFUywJCSImQmXhbGztdOFzb2siCklEU19NQVJLLAkJIiZKZWz2bOlzIgpJRFNfQ09QWSwJCSImTeFzb2zhcyIKSURTX1BBU1RFLAkJIiZCZWlsbGVzenTpcyIKSURTX1NFTEVDVEFMTCwJCSImQXog9nNzemVzIGtpamVs9mzpc2UiCklEU19TQ1JPTEwsCQkiJkf2cmdldOlzIgpJRFNfU0VBUkNILAkJIiZLZXJlc+lzIgpJRFNfRk5UX0RJU1BMQVksCSJNaW5kZW4ga2FyYWt0ZXIgJWxkIHBpeGVsIHN66WxlcyDpcyAlbGQgcGl4ZWwgbWFnYXMiCklEU19GTlRfUFJFVklFV18xLAkiRXogZWd5IHRlc3p0IgpJRFNfRk5UX1BSRVZJRVdfMiwJIiIKSURTX0RMR19USVRfREVGQVVMVCwgICAgIkJl4Wxs7XThcyAtIGFsYXDpcnRlbG1lemV0dCBiZeFsbO104XNvayIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIkJl4Wxs7XThcyAtIGFrdHXhbGlzIGJl4Wxs7XThc29rIgpJRFNfRExHX1RJVF9FUlJPUiwgICAgICAiQ29uZmlndXJhdGlvbiBlcnJvciIKSURTX0RMR19FUlJfU0JXSU5TSVpFLCAgIlNjcmVlbiBidWZmZXIgc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHdpbmRvdydzIG9uZSIKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIEJl4Wxs7XThc29rICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiS3Vyem9yIG3pcmV0ZSIsIC0xLCAxMCwgMTEsIDYwLCA0NCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiJktpY3NpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIksm9nplcGVzIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImTmFneSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJJcuFuee104XMiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIkVs9WJ1a2thbvMgbWVu/CIsIC0xLCA3OSwgMjMsIDQwLCAxMAoJQVVUT0NIRUNLQk9YICImQ29udHJvbCIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAiUyZoaWZ0IiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICJHeW9ycyBzemVya2VzenTpcyIsIC0xLCA3OSwgNDMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICImZW5nZWTpbHlleiIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIlBhcmFuY3MgZWz1em3pbnkiLCAtMSwgMTAsIDU3LCAxOTAsIDM1LCBCU19HUk9VUEJPWAoJTFRFWFQgIiZWaXNzemFo7XZoYXTzIHBhcmFuY3NvayBzeuFtYSA6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICJLZXR09Xrpc2VrICZlbHThdm9s7XThc2EiLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDUwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgQmV0+3TtcHVzICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAiJkJldPt07XB1cyIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIiZTeu1uIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJk3pcmV0IiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIEJl4Wxs7XThcyAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIlB1ZmZlciB6825hIiwgLTEsIDEwLCAxMSwgMTAwLCA0MiwgQlNfR1JPVVBCT1gKCUxURVhUICImU3rpbGVzc+lnIDoiLCAtMSwgMTQsIDI1LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9XSURUSCwgNjgsIDIzLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiJk1hZ2Fzc+FnIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiQWJsYWsgbelyZXQiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiUyZ66Wxlc3PpZyA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiTSZhZ2Fzc+FnIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJQcm9ncmFtIHbpZ2UiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICImS29uc29sIGJleuFy4XNhIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiRWRpdGlvbiIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIktvbnNvbCBwYXJhbel0ZXJlayIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTIwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiQmXhbGztdOFzb2sgbWVudOlzZSIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxMTAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIkNzYWsgYXogYWt0deFsaXMgbXVua2Fmb2x5YW1hdCBt82Rvc+104XNhIiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMjcsIDExMCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICJPSyIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICJN6WdzZSIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==