LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgpJRERfU0VSSUFMVUlDT05GSUcgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgMTU5ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJUdWxhamRvbnPhZ29rOiAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBMVEVYVCAgICAgICAgICJCYXVkIFLhdGEiLCAwLDUsMjAsNTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19CQVVELCA2MCwgMjAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICJQYXJpdOFzIiwgMCw1LDQwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfUEFSSVRZLCA2MCwgNDAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICLBcmFtbOFzLXZleulybOlzIiwgMCw1LDYwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfRkxPVywgNjAsIDYwLCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1R8Q0JTX0FVVE9IU0NST0xMfFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgTFRFWFQgICAgICAgICAiQWRhdGJpdGVrIiwgMCw1LDgwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfREFUQSwgNjAsIDgwLCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1R8Q0JTX0FVVE9IU0NST0xMfFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgTFRFWFQgICAgICAgICAiU3RvcGJpdGVrIiwgMCw1LDEwMCw1NSwxMAogIENPTUJPQk9YICAgICAgSURDX1NUT1AsIDYwLCAxMDAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBERUZQVVNIQlVUVE9OICJPSyIsICAgICBJRE9LLDMwLDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIk3pZ3NlIiwgSURDQU5DRUwsODUsMTM4LDUwLDE0CiAgLyogdGhlc2UgdHdvIGJ1dHRvbnMgYXJlIGZvciB0ZXN0aW5nIEdldC9TZXREZWZhdWx0Q29tbUNvbmZpZyAqLwogIC8qIFBVU0hCVVRUT04gICAgIkdldERlZmF1bHQiLCBJRF9HRVRERUZBVUxULDMwLDExNSw1MCwxNCAqLwogIC8qIFBVU0hCVVRUT04gICAgIlNldERlZmF1bHQiLCBJRF9TRVRERUZBVUxULDg1LDExNSw1MCwxNCAqLwpFTkQK