LyoKICogU3RhcnQKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgRGFuIEtlZ2VsCiAqIENvcHlyaWdodCAyMDA3IE1pa29sYWogWmFsZXdza2kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXJ1Y2hhbWlhIHByb2dyYW0gbHViIG90d2llcmEgZG9rdW1lbnQgdyBwcm9ncmFtaWUga3TzcnkgamVzdCB6d3lrbGUgdb95d2FueSBkbGEgdGVnbyByb3pzemVyemVuaWEuIFxuXApVv3ljaWU6IFxuXApzdGFydCBbb3BjamVdIG5hendhX3Byb2dyYW11IFsuLi5dIFxuXApzdGFydCBbb3BjamVdIG5hendhX2Rva3VtZW50dSBcblwKIFxuXApPcGNqZTogXG5cCi9NW2luaW1pemVkXSBVcnVjaGFtaWEgcHJvZ3JhbSB6bWluaW1hbGl6b3dhbnkuIFxuXAovTUFYW2ltaXplZF0gVXJ1Y2hhbWlhIHByb2dyYW0gem1ha3N5bWFsaXpvd2FueS4gXG5cCi9SW2VzdG9yZWRdICBVcnVjaGFtaWEgcHJvZ3JhbSBub3JtYWxuaWUgKGJleiBtaW5pbWFsaXphY2ppIGFuaSBtYWtzeW1hbGl6YWNqaSkuIFxuXAovV1thaXRdICAgICAgWmFjemVrYWogYb8gcHJvZ3JhbSB6YWtv8WN6eSBkemlhs2FuaWUgKGkgemFrb/FjelxuXApcdCAgICAga29kZW0gd3lqnGNpYSBwcm9ncmFtdSkuIFxuXAovTCAgICAgICAgICAgUG9rYb8gbGljZW5jauogdb95dGtvd25pa2EuIFxuXAogXG5cCnN0YXJ0LmV4ZSB3ZXJzamEgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApTdGFydCBqZXN0IGRvc3RhcmN6YW55IEJFWiCvQURORUogR1dBUkFOQ0pJOyBzemN6ZWfzs3kgdyBvcGNqaSAvTC4gXG5cClRvIGplc3Qgd29sbmUgb3Byb2dyYW1vd2FuaWUgaSBtb79lc3ogamUgcm96cG93c3plY2huaWHmIChwb2QgcGV3bnltaVxuXAp3YXJ1bmthbWkpOyB1cnVjaG9tICdzdGFydCAvTCcgYWJ5IHBvem5h5iBzemN6ZWfzs3kuIFxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB3ZXNqYSAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBcblwKIFxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIFxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIFxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIFxuXAogXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFxuXApGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiBcblwKIFxuXApTZWUgdGhlIENPUFlJTkcuTElCIGZpbGUgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uIFxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIk5pZSB1ZGGzbyBzaeogdXJ1Y2hvbWnmIGFwbGlrYWNqaSBsdWIgbmllIG1hIGFwbGlrYWNqaSBza29qYXJ6b25laiB6IGRhbnltIHBsaWtpZW0uXG5TaGVsbEV4ZWN1dGVFeCBuaWUgcG93aW9ks28gc2nqIgp9Cg==