LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKiBDb3B5cmlnaHQgMjAwNCBQaW90ciBDYWJhbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgpJRERfU0FWRU9QVElPTlMgRElBTE9HIEZJWEVEIElNUFVSRSAgNDMsIDM3LCAxOTYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPcGNqZSBrb21wcmVzamkiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiJld5Ymllcnogc3RydW1pZfE6IiwtMSwyLDUsMTE0LDEwCiAgICBDT01CT0JPWCAgICAgICAgSURDX1NUUkVBTSwyLDE4LDEzNCw2MSxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiJk9wY2plLi4uIixJRENfT1BUSU9OUywxNDUsMTcsNDUsMTQKICAgIEFVVE9DSEVDS0JPWCAgICAiJlByemVwbG90IGNvIixJRENfSU5URVJMRUFWRSwzLDQyLDYwLDExLFdTX1RBQlNUT1AKICAgIEVESVRURVhUICAgICAgICBJRENfSU5URVJMRUFWRUVWRVJZLDY2LDQxLDMyLDEyLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgImtsYXRlayIsLTEsMTA0LDQzLDM2LDkKICAgIExURVhUICAgICAgICAgICAiV3licmFueSBmb3JtYXQ6IiwtMSwyLDU2LDUzLDkKICAgIExURVhUICAgICAgICAgICAiWmFyZXplcndvd25hZSBtaWVqc2NlIixJRENfRk9STUFUVEVYVCw1NSw1Niw5MCwyNgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDUsNDIsNDUsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW51bHVqIixJRENBTkNFTCwxNDUsNjEsNDUsMTQKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgSURTX1dBVkVTVFJFQU1GT1JNQVQJIldhdmVmb3JtOiAlcyIKICBJRFNfV0FWRUZJTEVUWVBFCSJXYXZlZm9ybSIKICBJRFNfQUxMTVVMVElNRURJQQkiV3N6eXN0a2llIHBsaWtpIG11bHRpbWVkaWFsbmUiCiAgSURTX0FMTEZJTEVTCQkiV3N6eXN0a2llIHBsaWtpICgqLiopQCouKiIKICBJRFNfVklERU8JCSJvYnJheiIKICBJRFNfQVVESU8JCSJkn3dp6msiCiAgSURTX0FWSVNUUkVBTUZPUk1BVAkiJXMgJXMgIyVkIgogIElEU19BVklGSUxFVFlQRQkiV2luZSBBVkktZG9teZxsbmEtb2Jzs3VnYS1wbGlrdSIKICBJRFNfVU5DT01QUkVTU0VEICAgICAgIm5pZSBza29tcHJlc293YW55Igp9Cg==