LyoKICogU3RhcnQKICogS29yZWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgRGFuIEtlZ2VsCiAqIENvcHlyaWdodCAyMDA1IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19VU0FHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLHrrHXuLLAuyC9x8fgvcPFsLDFs6ogurjF6yDGxMDPv6Egw7ewocfYvK0gu+e/67XHtMIgIMeusde4ssC4t84gua68rSC/rbHiIFxuXApVc2FnZTogXG5cCnN0YXJ0IFu/ybzHXSDHrrHXuLLAzLOqIMbEwM8gwMy4pyBbLi4uXSBcblwKc3RhcnQgW7/JvMddILmuvK0gxsTAzyDAzLinIFxuXAogXG5cCk9wdGlvbnM6IFxuXAovTVtpbmltaXplZF0gx66x17iyIMPWvNLIrSC788XCt84gvcfH4C4gXG5cCi9NQVhbaW1pemVkXSDHrrHXuLIgw9a068itILvzxcK3ziC9x8fgLiBcblwKL1JbZXN0b3JlZF0gIMeusde4ssC7ILq4xeu788XCt84gvcPA273DxbCx4iAow9a80sittbUgvsa0z7DtIMPWtOvIrbW1IL7GtNQpLiBcblwKL1dbYWl0XSAgICAgvcPA27XIIMeusde4ssDMILOhs68gtqex7sH2ILHitNm4siwgs6GzryC2pyDBvrfhxNq15bimILOyseguIFxuXAovTCAgICAgICAgICAgu+e/68DaILbzwMy8vr26ILq4v6nB3CBcblwKIFxuXApzdGFydC5leGUgdmVyc2lvbiAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClN0YXJ0IGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgcnVuIHdpdGggL0wgb3B0aW9uLiBcblwKVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCBcblwKdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyBydW4gJ3N0YXJ0IC9MJyBmb3IgZGV0YWlscy4gXG5cCiIKClNUUklOR19MSUNFTlNFLCAic3RhcnQuZXhlIHZlcnNpb24gMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIFxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIFxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gXG5cCiBcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBcblwKIFxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuIFxuXAogXG5cClNlZSB0aGUgQ09QWUlORy5MSUIgZmlsZSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4gXG5cCiIKClNUUklOR19FWEVDRkFJTCAix66x17iywLsgvcfH4LXHwfYgvsq+0rDFs6osIMH2waS1yCDGxMDPv6G0wiC+7rayIMeusde4srW1IL+ssOG1x77uwNbB9iC+yr3AtM+02S5cblNoZWxsRXhlY3V0ZUV4IL3HxtAiCn0K