LyoKICogVW5pbnN0YWxsZXIgKFBvcnR1Z3Vlc2UgUmVzb3VyY2VzKQogKgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICoKICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKSUREX1VOSU5TVEFMTEVSIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMzMwLCAxNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRlc2luc3RhbGFkb3IgZGUgQXBsaWNh5/VlcyBXaW5lIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiUG9yIGZhdm9yIHNlbGVjY2lvbmUgYSBhcGxpY2Hn428gcXVlIGRlc2VqYSBkZXNpbnN0YWxhcjoiLElEQ19QTEVBU0VTRUxFQ1QsMTAsMTAsMjUwLDE0CiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTFRFUiwxMCwyNSwyNTAsMTQsRVNfQVVUT0hTQ1JPTEwKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVCwxMCw0MywyNTAsMTA2LExCU19OT0lOVEVHUkFMSEVJR0hUIHwKICAgICAgICAgICAgICAgICAgICBMQlNfRVhURU5ERURTRUwgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICImRGVzaW5zdGFsYXIiLElEQ19VTklOU1RBTEwsMjcwLDQ4LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZBY2VyY2EiLElEQ19BQk9VVCwyNzAsNjUsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiJlNhaXIiLElEQ19FWElULDI3MCw4MSw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIkRlc2luc3RhbGFkb3IgZGUgQXBsaWNh5/VlcyBXaW5lIgogICAgIElEU19BQk9VVCwgIkRlc2luc3RhbGFkb3IgZGUgQXBsaWNh5/VlcyBXaW5lIChDKSAyMDA1IHBvciBBbmRyZWFzIE1vaHIsIEhhbm51IFZhbHRvbmVuIGUgSm9uYXRoYW4gRXJuc3QuIgogICAgIElEU19BQk9VVFRJVExFLCAiQWNlcmNhIGRvIERlc2luc3RhbGFkb3IiCiAgICAgSURTX1JFR0lTVFJZS0VZTk9UQVZBSUxBQkxFLCAiQ2hhdmUgZGUgcmVnaXN0byBkZSBkZXNpbnN0YWxh5+NvIG7jbyBkaXNwb27tdmVsIChhaW5kYSksIG5hZGEgYSBmYXplciAhIgogICAgIElEU19VTklOU1RBTExGQUlMRUQsICJFeGVjdefjbyBkbyBjb21hbmRvIGRlIGRlc2luc3RhbGHn428gJyVzJyBmYWxoYWRvLCB0YWx2ZXogZGV2aWRvIGEgZmFsdGFyIG8gZXhlY3V04XZlbC5cclxuRGVzZWphIHJlbW92ZXIgYSBlbnRyYWRhIGRlIGRlc2luc3RhbGHn428gZG8gcmVnaXN0byA/Igp9Cg==