LyoKICogV2luZUNmZyAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKgogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgovKgoKz/Du4/Dg7OzgIO3g9e7k6PLx/yDiIPHy4OTo6CDv8OXk4uDw6PLl6/zt7ukg8ODn8ODh7vLq6CwK4iD04Onr5SDw5fHz8PHu4iDu5ujk4P7y8f8g5+3g9+jy5ev87fvlIOjn7OXt5e3o/ywK7+798u7s8yD/IO3lIO3g8fLw4Oji4Osg8ODn7OXw+yD96+Xs5e3y7uIuCgrK4Oog8u7r/OruIOHz5OXyIO7h+v/i6+Xt7iDuIOL79e7k5SD08+3q9uju7eDr/O3u6SDi5fDx6OgK/fLuIOHz5OXyIPHk5evg7e4uCgoqLwoKSUREX0dFTkVSQUxDRkcgRElBTE9HRVggMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgQ09NQk9CT1ggICAgICAgIElEQ19XSU5WRVIsODMsMTUzLDE1OCw1NixDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIENPTUJPQk9YICAgICAgICBJRENfRE9TVkVSLDgzLDE3MiwxNTgsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBMVEVYVCAgICAgICAgICAgIsLl8PHo/yBXaW5lOiIsSURDX1NUQVRJQywxMTksMTcsNDUsOAogICAgTFRFWFQgICAgICAgICAgICJDVlMiLElEQ19XSU5FVkVSLDE2OSwxNyw1Niw4CiAgICBMVEVYVCAgICAgICAgICAgIsLl8PHo/yBXaW5kb3dzOiIsSURDX1NUQVRJQywxNywxNTUsNTgsOAogICAgTFRFWFQgICAgICAgICAgICLC5fDx6P8gRE9TOiIsSURDX1NUQVRJQywxNywxNzMsNTcsOAogICAgQ09OVFJPTCAgICAgICAgIElEQl9XSU5FLElEQ19TVEFUSUMsIlN0YXRpYyIsU1NfQklUTUFQIHwgU1NfQ0VOVEVSSU1BR0UgfCAKICAgICAgICAgICAgICAgICAgICBTU19SRUFMU0laRUlNQUdFIHwgV1NfQk9SREVSLDE1LDE3LDE1NywxMTEsIFdTX0VYX1RSQU5TUEFSRU5UCiAgICBMVEVYVCAgICAgICAgICAgImh0dHA6Ly93d3cud2luZWhxLm9yZy8iLElEQ19TVEFUSUMsMTE5LDMxLDEwNiw4CiAgICBHUk9VUEJPWCAgICAgICAgIs/u4uXk5e3o5SDv7iDz7O7r9+Dt6P4iLElEQ19TVEFUSUMsOCwxMTUsMjQ0LDk3CiAgICBMVEVYVCAgICAgICAgICAgIldpbmUg7/Dl5O7x8uDi6//l8iDi7ufs7ubt7vHy/CDk6/8gV2luZG93cy3v8Ojr7ubl7ejpIOjs6PLo8O7i4PL8IPDg5+vo9+375SDi5fDx6Ogg6CDi7eX47ejpIOLo5CBXaW5kb3dzLiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxNSwxMjgsMjI3LDIwCiAgICBHUk9VUEJPWCAgICAgICAgIsjt9O7w7OD26P8iLElEQ19TVEFUSUMsOCw0LDI0NCwxMDYKLyoKICAgIENURVhUICAgICAgICAgICAi3fLgIOHo4evo7vLl6uAg/+Lr/+Xy8f8g8eLu4e7k7fvsIO/w7uPw4Ozs7fvsIO7h5fHv5ffl7ejl7Dsg4vsg7O7m5fLlIPDg8e/w7vHy8ODt//L8IOW4IOgv6OvoIOzu5Oj06Pbo8O7i4PL8IO/uIPPx6+7i6P/sIOvo9uXt5+joIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwg7u/z4evo6u7i4O3t7ukgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyDi5fDx6OggMi4xIOvo9uXt5+joIOjr6CAo7eAg4uD45SDz8ezu8vDl7ejlKSDr/uHu6SDh7uvl5SDv7ufk7eXpLiIsCiovCiAgICBDVEVYVCAgICAgICAgICAgIlRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIiwKICAgICAgICAgICAgICAgICAgICBJRENfU1RBVElDLDExOSw0NCwxMjQsNTkKRU5ECgpJRERfQVBQQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCkVORAoKSUREX0dSQVBIQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBDT05UUk9MICAgICAgICAgIsjx7+7r/Ofu4uDy/CDw4PH46PDl7ejlIFhGcmVlIERHQSIsSURDX1hER0EsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwxNDUsNDQsOTcsMTAKICAgIENPTlRST0wgICAgICAgICAiwurr/vfo8vwg8ODh7vfo6SDx8u7rIFdpbmUiLElEQ19FTkFCTEVfREVTS1RPUCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE3LDExMCw4NCwxMAogICAgRURJVFRFWFQgICAgICAgIElEQ19ERVNLVE9QX1dJRFRILDY0LDEyNSw0MCwxNCxFU19BVVRPSFNDUk9MTCB8IEVTX05VTUJFUiB8IFdTX0RJU0FCTEVECiAgICBFRElUVEVYVCAgICAgICAgSURDX0RFU0tUT1BfSEVJR0hULDExNywxMjUsNDAsMTQsRVNfQVVUT0hTQ1JPTEwgfCBFU19OVU1CRVIgfCBXU19ESVNBQkxFRAogICAgR1JPVVBCT1ggICAgICAgICLN4PHy8O7p6ugg7vLw6PHu4uroIixJRENfU1RBVElDLDgsNCwyNDQsNjAKICAgIExURVhUICAgICAgICAgICAixPDg6eLl8CD24uXy4CDoIO3g8fLw7unq6CDu8vDo8e7i6ugg6PHv7uv85/P+8vH/IOTr/yDu7/Lo7Ojn4Pbo6CDu8u7h8ODm5e3o/yD24uXy7uIg6CDv8Ojr7ubl7ejpLiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxNSwxNywyMjgsMjIKCQkgICAgCiAgICBMVEVYVCAgICAgICAgICAgItDg5+zl+eXt7iDx6PHy5ezt+/Ug9uLl8u7iOiIsSURDX1NUQVRJQywxNSw0Myw3Niw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1NZU0NPTE9SUyw5MCw0MSw0MCwxNCxFU19BVVRPSFNDUk9MTCB8IEVTX05VTUJFUgogICAgCiAgICBHUk9VUEJPWCAgICAgICAgItDg4e736Okg8fLu6yBXaW5lIixJRENfU1RBVElDLDgsNjUsMjQ0LDgzCiAgICBMVEVYVCAgICAgICAgICAgIldpbmUg7O7m5fIg6Ozo8ujw7uLg8vwg8ODh7vfo6SDx8u7rIFdpbmRvd3Mg6OvoIPDg4e7y4PL8IOIg8OXm6OzlICIiTWFuYWdlZCIiICjv7iDz7O7r9+Dt6P4pLCDq7uPk4CDn4CDw4Ofs5fnl7ejlIO7q7u0g7vLi5ffg5fIg8uXq8/no6SDs5e3l5Obl8CDu6u7tIFgxMS4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsNzcsMjI4LDI4CiAgICBMVEVYVCAgICAgICAgICAgItDg5+zl8CDw4OHu9+Xj7iDx8u7r4DoiLElEQ19ERVNLVE9QX1NJWkUsMTcsMTI1LDQ0LDgsV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiWCIsSURDX0RFU0tUT1BfQlksMTA4LDEyNSw4LDgsV1NfRElTQUJMRUQKRU5ECgpJRERfRExMQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCkVORAoKSUREX1NZU1RFTUNGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAixOjx6ugiLElEQ19TVEFUSUMsOCw0LDI0NCwxMjAKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVF9EUklWRVMsMTUsMjMsMTc5LDkwLFdTX1ZTQ1JPTEwKICAgIFBVU0hCVVRUT04gICAgICAiJsTu4eDi6PL8IixJRENfRFJJVkVfQURELDE5NywyMiw1MCwyMgogICAgUFVTSEJVVFRPTiAgICAgICIm0+Tg6+jy/CIsSURDX0RSSVZFX1JFTU9WRSwxOTcsNTEsNTAsMjIKICAgIFBVU0hCVVRUT04gICAgICAiJs/w4OLo8vwiLElEQ19EUklWRV9FRElULDE5Nyw4MCw1MCwyMgpFTkQKCklERF9EUklWRV9FRElUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjA3LCAxMTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAizeDx8vDu6ergIOTo8ergIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRF9EUklWRV9PSywxNTAsNyw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7eAiLElEX0RSSVZFX0NBTkNFTCwxNTAsMjQsNTAsMTQKICAgIEVESVRURVhUICAgICAgICBJRENfRFJJVkVfRURJVF9OQU1FLDQyLDgsNzgsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAixOjx6joiLC0xLDExLDEwLDI5LDEyCiAgICBFRElUVEVYVCAgICAgICAgSURDX0RSSVZFX0VESVRfTEFCRUwsNDIsMjMsNzgsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAizOXy6uA6IiwtMSwxMSwyNSwyOSwxMgogICAgRURJVFRFWFQgICAgICAgIElEQ19EUklWRV9FRElUX1RZUEUsNDIsMzgsNzgsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAi0ujvOiIsLTEsMTEsNDAsMjksMTIKICAgIEVESVRURVhUICAgICAgICBJRENfRFJJVkVfRURJVF9QQVRILDQyLDUzLDc4LDEzLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgIs/z8vw6IiwtMSwxMSw1NSwyOSwxMgogICAgRURJVFRFWFQgICAgICAgIElEQ19EUklWRV9FRElUX0ZTLDQyLDY4LDc4LDEzLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgItTg6evu4uD/IPHo8fLl7OA6IiwtMSwxMSw3MCwyOSwxMgogICAgRURJVFRFWFQgICAgICAgIElEQ19EUklWRV9FRElUX0RFVklDRSw0Miw4Myw3OCwxMyxFU19BVVRPSFNDUk9MTAogICAgTFRFWFQgICAgICAgICAgICLT8fLw7unx8uLuOiIsLTEsMTEsODUsMjksMTIKRU5ECgpJRERfRFJJVkVDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAixPDz4+jlIOTo8eroIixJRENfU1RBVElDLDcsMTA3LDI0NiwxMTIKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVF9EUklWRVMsMTQsMTE4LDIzMiw3NixMQlNfU09SVCB8IExCU19OT0lOVEVHUkFMSEVJR0hUIHwgCiAgICAgICAgICAgICAgICAgICAgTEJTX01VTFRJQ09MVU1OIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAixO7h4OLo8vwuLi4iLElEQ19CVVRUT05fQURELDE0LDE5OSwzNywxNAogICAgUFVTSEJVVFRPTiAgICAgICLT5ODr6PL8IixJRENfQlVUVE9OX1JFTU9WRSw1NSwxOTksMzcsMTQKICAgIFBVU0hCVVRUT04gICAgICAiz/Dg4urgLi4uIixJRENfQlVUVE9OX0VESVQsOTcsMTk5LDM3LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIsDi8u7u7/Dl5OXr5e3o5S4uLiIsSURDX0JVVFRPTl9BVVRPREVURUNULDE5NywxOTksNDksMTQKRU5ECgpJRERfRFJJVkVfRURJVDIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNzIsIDE1MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLN4PHy8O7p6uAg5Ojx6uAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIERFRlBVU0hCVVRUT04gICAiT0siLElEX0JVVFRPTl9PSywyMTcsNSw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7ejy/CIsSURfQlVUVE9OX0NBTkNFTCwyMTcsMjIsNTAsMTQKICAgIExURVhUICAgICAgICAgICAiwfPq4uA6IixJRENfU1RBVElDLDUsMjMsMjYsOQogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX0xBQkVMLDYzLDExNCw3OCwxMyxFU19BVVRPSFNDUk9MTAogICAgTFRFWFQgICAgICAgICAgICLM5fLq4DoiLElEQ19TVEFUSUNfTEFCRUwsMzMsMTE3LDI5LDEyCiAgICBMVEVYVCAgICAgICAgICAgItLo7zoiLElEQ19TVEFUSUMsNSw1NCwyMSwxMAogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX1BBVEgsMzEsNSwxMTcsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiz/Py/DoiLElEQ19TVEFUSUMsNSw5LDIwLDkKICAgIExURVhUICAgICAgICAgICAiyOzl7eA6IixJRENfU1RBVElDLDUsMzksMjUsOQogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX1NFUklBTCw2MywxMjksNzgsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAi0eXw6Ont++kg7e7s5fA6IixJRENfU1RBVElDX1NFUklBTCwzMywxMzMsMjksMTIKICAgIENPTUJPQk9YICAgICAgICBJRENfQ09NQk9fTEVUVEVSLDMxLDIwLDc4LDYwLENCU19EUk9QRE9XTkxJU1QgIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAizuHn7vAuLi4iLElEQ19CVVRUT05fQlJPV1NFX1BBVEgsMTU0LDUsNDAsMTMKICAgIENPTUJPQk9YICAgICAgICBJRENfQ09NQk9fVFlQRSwzMSw1Miw3OCw2MCxDQlNfRFJPUERPV05MSVNUIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIENPTlRST0wgICAgICAgICAiwOLy7u7v8OXk5evo8vwg8SDz8fLw7unx4uA6IixJRENfUkFESU9fQVVUT0RFVEVDVCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sMjEsNzksOTMsMTAKICAgIEVESVRURVhUICAgICAgICBJRENfRURJVF9ERVZJQ0UsMzMsODksMTA4LDEzLEVTX0FVVE9IU0NST0xMCiAgICBQVVNIQlVUVE9OICAgICAgIs7h5+7wLi4uIixJRENfQlVUVE9OX0JST1dTRV9ERVZJQ0UsMTQ4LDg5LDQwLDEzCiAgICBDT05UUk9MICAgICAgICAgIsfg5ODy/CDi8PP37fP+OiIsSURDX1JBRElPX0FTU0lHTiwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sMjEsMTA0LDY5LDEwCiAgICBHUk9VUEJPWCAgICAgICAgIszl8urgIOgg8eXw6Ont++kg7e7s5fAiLElEQ19CT1hfTEFCRUxTRVJJQUwsMTUsNjgsMTgwLDc5CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgCkJFR0lOCiAgICBJRFNfV0lORV9WRVJTSU9OICAgICAgICAiQ1ZTIgogICAgSURTX1RBQl9HRU5FUkFMICAgICAgICAgIs7h+ejlIgogICAgSURTX1RBQl9ETExTICAgICAgICAgICAgIsHo4evo7vLl6ugiCiAgICBJRFNfVEFCX0RSSVZFUyAgICAgICAgICAixOjx6ugiCkVORAo=