LyoKICogVW5pbnN0YWxsZXIgKFN3ZWRpc2ggUmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNyBEYW5pZWwgTnlsYW5kZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKCklERF9VTklOU1RBTExFUiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDMzMCwgMTYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBdmluc3RhbGxlcmEgV2luZS1wcm9ncmFtIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiVuRsaiBwcm9ncmFtbWV0IHNvbSBkdSB2aWxsIGF2aW5zdGFsbGVyYToiLElEQ19QTEVBU0VTRUxFQ1QsMTAsMTAsMjUwLDE0CiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTFRFUiwxMCwyNSwyNTAsMTQsRVNfQVVUT0hTQ1JPTEwKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVCwxMCw0MywyNTAsMTA2LExCU19OT0lOVEVHUkFMSEVJR0hUIHwKICAgICAgICAgICAgICAgICAgICBMQlNfRVhURU5ERURTRUwgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICImQXZpbnN0YWxsZXJhIixJRENfVU5JTlNUQUxMLDI3MCw0OCw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICImT20iLElEQ19BQk9VVCwyNzAsNjUsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQSZ2c2x1dGEiLElEQ19FWElULDI3MCw4MSw1MCwxNApFTkQKCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJBdmluc3RhbGxlcmEgV2luZS1wcm9ncmFtIgogICAgIElEU19BQk9VVCwgIldpbmUgQXBwbGljYXRpb24gVW5pbnN0YWxsZXIgKEMpIDIwMDUgQW5kcmVhcyBNb2hyLCBIYW5udSBWYWx0b25lbiBvY2ggSm9uYXRoYW4gRXJuc3QuIgogICAgIElEU19BQk9VVFRJVExFLCAiT20gVW5pbnN0YWxsZXIiCiAgICAgSURTX1JFR0lTVFJZS0VZTk9UQVZBSUxBQkxFLCAiVW5pbnN0YWxsIHJlZ2lzdHJ5IGtleSBub3QgYXZhaWxhYmxlICh5ZXQpLCBub3RoaW5nIHRvIGRvICEiCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIkV4ZWN1dGlvbiBvZiB1bmluc3RhbGwgY29tbWFuZCAnJXMnIGZhaWxlZCwgcGVyaGFwcyBkdWUgdG8gbWlzc2luZyBleGVjdXRhYmxlLlxyXG5EbyB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHVuaW5zdGFsbCBlbnRyeSBmcm9tIHRoZSByZWdpc3RyeSA/Igp9Cg==