LyoKICogV2luZUNvbnNvbGUgU2ltcGxpZmllZCBDaGluZXNlIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDIgbGl1c3BpZGVyIDxsaXVzcGlkZXJAeWFob28uY29tPgogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DSElORVNFLCBTVUJMQU5HX0NISU5FU0VfU0lNUExJRklFRAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiseC8raOoJkWjqSIKSURTX0RFRkFVTFQsCQkiyejOqsSsyM/WtaOoJkSjqSIKSURTX1BST1BFUlRJRVMsCQkiyvTQ1KOoJlCjqSIKSURTX01BUkssCQkiseq8x6OoJk2jqSIKSURTX0NPUFksCQkiuLTWxqOoJkOjqSIKSURTX1BBU1RFLAkJItWzzPmjqCZQo6kiCklEU19TRUxFQ1RBTEwsCQkiyKvRoaOoJlOjqSIKSURTX1NDUk9MTCwJCSK59ravo6gmUqOpIgpJRFNfU0VBUkNILAkJIsvRy/ejqCZFo6kiCklEU19GTlRfRElTUExBWSwJIsO/uPbX1ra8yscgJWxkILj2z/HL2L/to6wlbGQguPbP8cvYuN8iCklEU19GTlRfUFJFVklFV18xLAki1eLKx9K7ts6y4srU0+++5CIKSURTX0ZOVF9QUkVWSUVXXzIsCSIiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICLF5NbDIC0gxKzIz8no1sMiCklEU19ETEdfVElUX0NVUlJFTlQsICAgICLF5NbDIC0gtbHHsMno1sMiCklEU19ETEdfVElUX0VSUk9SLCAgICAgICJDb25maWd1cmF0aW9uIGVycm9yIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsICAiU2NyZWVuIGJ1ZmZlciBzaXplIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgd2luZG93J3Mgb25lIgpFTkQKCklERF9PUFRJT04gRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIg0aHP7iAiCkZPTlQgMTQsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICK54rHqs9+05yIsIC0xLCAxMCwgMTEsIDYwLCA0NCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAi0KGjqCZTo6kiLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAi1tCjqCZNo6kiLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE0LCAzMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIrTzo6gmTKOpIiwgSURDX09QVF9DVVJTT1JfTEFSR0UsIDE0LCA0MywgNDQsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIr/Y1sYiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIrWvs/ayy7WlIiwgLTEsIDc5LCAyMywgNDAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIr/sy9mx4LytIiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIsb008OjqCZFo6kiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOSwgNDMsIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLA+sq3w/zB7iIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAi1+6087zHwrzD/MHuyv2juiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiyb6z/cGs0PjP4M2stcTD/MHuo6gmUqOpIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDY3LCA1MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiINfWzOUgIgpGT05UIDE0LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAi19bM5aOoJkajqSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgItHVyaujqCZDo6kiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICK089Cho6gmU6OpIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIMXk1sMgIgpGT05UIDE0LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiu7qz5cf40/IiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIr/ttsijqCZXo6mjuiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICK437bIo6gmSKOpo7oiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAitLC/2rTz0KEiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiv+22yKOoJkmjqaO6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiuN+2yKOoJkWjqaO6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAitbGzzNDyzcuz9rrzIiwgLTEsIDExNSwgMTEsIDgwLCA0MiwgQlNfR1JPVVBCT1gKCUFVVE9DSEVDS0JPWCAiudix1dDpxOLW1bbLo6gmQ6OpIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiRWRpdGlvbiIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gItDpxOLW1bbL1MvQ0LLOyv0iCkZPTlQgMTQsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICKxo8H0tbHHsMXk1sPS1LHjz8K0zsq508MiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICK99tDeuMS1scewu+G7sCIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiyLe2qCIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICLIoc/7IiwgSURDQU5DRUwsIDY1LCA0NSwgMzUsIDEyCn0K