LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKiBDb3B5cmlnaHQgMjAwMyBJdmFuIExlbyBQdW90aQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiYXZpZmlsZV9wcml2YXRlLmgiCgpMQU5HVUFHRSBMQU5HX0lUQUxJQU4sIFNVQkxBTkdfTkVVVFJBTAoKSUREX1NBVkVPUFRJT05TIERJQUxPRyAgNDMsIDM3LCAyMjYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPcHppb25pIGRpIGNvbXByZXNzaW9uZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICImU2NlZ2xpZXJlIHVuIGZsdXNzbzoiLC0xLDIsNSwxNTQsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfU1RSRUFNLDIsMTgsMTU0LDYxLENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZPcHppb25pLi4uIixJRENfT1BUSU9OUywxNzAsMTcsNTAsMTQKICAgIEFVVE9DSEVDS0JPWCAgICAiJkludGVyZm9saWF6aW9uZSBvZ25pIixJRENfSU5URVJMRUFWRSwzLDQyLDc1LDExLFdTX1RBQlNUT1AKICAgIEVESVRURVhUICAgICAgICBJRENfSU5URVJMRUFWRUVWRVJZLDgxLDQxLDMyLDEyLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgImZvdG9ncmFtbWkiLC0xLDExOSw0MywzNiw5CiAgICBMVEVYVCAgICAgICAgICAgIkZvcm1hdG8gYXR0dWFsZToiLC0xLDMsNTYsNzMsOQogICAgTFRFWFQgICAgICAgICAgICJTZWduYXBvc3RvIixJRENfRk9STUFUVEVYVCw3NSw1Niw5MCwyNgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNzAsNDIsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxsYSIsSURDQU5DRUwsMTcwLDYxLDUwLDE0CkVORAoKU1RSSU5HVEFCTEUKewogIElEU19XQVZFU1RSRUFNRk9STUFUCSJGb3JtYXRvIHdhdmU6ICVzIgogIElEU19XQVZFRklMRVRZUEUJIkZvcm1hdG8gd2F2ZSIKICBJRFNfQUxMTVVMVElNRURJQQkiVHV0dGkgaSBmaWxlIG11bHRpbWVkaWFsaSIKICBJRFNfQUxMRklMRVMJCSJUdXR0aSBpIGZpbGUgKCouKilAKi4qIgogIElEU19WSURFTwkJIlZpZGVvIgogIElEU19BVURJTwkJIkF1ZGlvIgogIElEU19BVklTVFJFQU1GT1JNQVQJIiVzICVzICMlZCIKICBJRFNfQVZJRklMRVRZUEUJIkdlc3RvcmUgcHJlZGVmaW5pdG8gZGkgV2luZSBkZWkgZmlsZSBBVkkiCiAgSURTX1VOQ09NUFJFU1NFRCAgICAgICJOb24gY29tcHJlc3NvIgp9Cg==