LyoKICogU3RhcnQgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAix+Dv8/Hq4OXyIO/w7uPw4Ozs+yDo6+gg7vLq8Pvi4OXyIOTu6vPs5e3y+yDv8Ojr7ubl7ejl7CwgXG5cCu7h+/ft7iDo8e/u6/zn8+Xs++wg5Ov/IPTg6evu4iDxIOTg7e377CDw4PH46PDl7ejl7C4gXG5cblwKyPHv7uv85+7i4O3o5TogXG5cCnN0YXJ0IFtvcHRpb25zXSDo7P9f9ODp6+Bf7/Du4/Dg7Oz7IFsuLi5dIFxuXApzdGFydCBbb3B0aW9uc10g6Oz/X/Tg6evgX+Tu6vPs5e3y4CBcblwKIFxuXArO7/bo6DogXG5cCi9NW2luaW1pemVkXSDH4O/z8fLo8vwg7/Du4/Dg7OzzIOzo7ejs6Ofo8O7i4O3t7ukuIFxuXAovTUFYW2ltaXplZF0gx+Dv8/Hy6PL8IO/w7uPw4Ozs8yDs4Orx6Ozo5+jw7uLg7e3u6S4gXG5cCi9SW2VzdG9yZWRdICDH4O/z8fLo8vwg7/Du4/Dg7OzzIO3u8Ozg6/zt7iAo7eUg7ODq8ejs6Ofo8O7i4O3t7iDoIO3lIOzo7ejs6Ofo8O7i4O3t7ikuIFxuXAovV1thaXRdICAgICAgzubo5ODy/CDn4OLl8Pjl7ej/IOfg7/P55e3t7ukg7/Du4/Dg7Oz7IOgg4vvp8ugg8SDq7uTu7CDluCDi+/Xu5OAuIFxuXAovTCAgICAgICAgICAgz+7q4Ofg8vwg6+j25e3n6P4g6u7t5fft7uPuIO/u6/zn7uLg8uXr/y4gXG5cCiBcblwKc3RhcnQuZXhlIOLl8PHo/yAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClN0YXJ0IOjk5fIgwcXHIMrAysjVLcvIwc4gw8DQwM3SyMk7IO/u5PDu4e3u8fLoIO/w6CDn4O/z8erlIPEg7u/26OXpIC9MLiBcblwK3fLuIPHi7uHu5O3g/yDv8O7j8ODs7OAsIOgg4vsg7O7m5fLlIOW4IPDg8e/w7vHy8ODt//L8IO3gIO7v8OXk5eu47e379SBcblwK8/Hr7uLo//U7IO/u5PDu4e3u8fLoIO/w6CDn4O/z8erlIPEg7u/26OXpIC9MLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUg4uXw8ej/IDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwK3fLuIO/w7uPw4Ozs4CDw4PHv8O7x8vDg7f/l8vH/IO/uIOvo9uXt5+joIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCugg/+Lr/+Xy8f8g8eLu4e7k7fvsIO/w7uPw4Ozs7fvsIO/w7uTz6vLu7C4gXG5cClxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIFxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIFxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gXG5cCiBcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBcblwKIFxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuIFxuXAogXG5cClNlZSB0aGUgQ09QWUlORy5MSUIgZmlsZSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4gXG5cCiIKClNUUklOR19FWEVDRkFJTCAiz/Do6+7m5e3o5SDt5SDs7ubl8iDh+/L8IOfg7/P55e3uIOjr6CDt5SDg8fHu9ujo8O7i4O3uIO/w6Ovu5uXt6Okg8SDy6O/u7CDk4O3t7uPuIOTu6vPs5e3y4C5cbsL75+7iIFNoZWxsRXhlY3V0ZUV4IO/w7uLg6+jr8f8iCn0K