LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9uIGJ5IEd1c3Rhdm8gSnVuaW9yIEFsdmVzIDxhbHZlc0Bjb3JyZWlvbmV0LmNvbS5icj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogVGhpcyBmaWxlIGlzIG5vdCB5ZXQgY29tcGxldGUgISEgKi8KCiNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBQdAojZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgMTYKCi8qIE1lbnUgKi8KCiNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAiJkFycXVpdm8iCiNkZWZpbmUgTUVOVV9GSUxFX09QRU4gICAgICAgICAgICAgICAiQSZicmlyLi4uIgojZGVmaW5lIE1FTlVfRklMRV9QUklOVCAgICAgICAgICAgICAgIiZJbXByaW1pciIKI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlRFUl9TRVRVUCAgICAgICImQ29uZmlndXJhciBJbXByZXNzb3JhLi4uIgojZGVmaW5lIE1FTlVfRklMRV9FWElUICAgICAgICAgICAgICAgIiZTYWlyIgoKI2RlZmluZSBNRU5VX0VESVQgICAgICAgICAgICAgICAgICAgICImRWRpdGFyIgojZGVmaW5lIE1FTlVfRURJVF9DT1BZX0RJQUxPRyAgICAgICAgIiZDb3BpYXIuLi4iCiNkZWZpbmUgTUVOVV9FRElUX0FOTk9UQVRFICAgICAgICAgICAiJkFub3Rhci4uLiIKCiNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJk1hcmNhZG9yIgojZGVmaW5lIE1FTlVfQk9PS01BUktfREVGSU5FICAgICAgICAgIiZEZWZpbmlyLi4uIgoKI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImQWp1ZGEiCiNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiQWp1ZGEgJm5hIGFqdWRhIgojZGVmaW5lIE1FTlVfSEVMUF9PTl9UT1AgICAgICAgICAgICAgIlNlbXByZSAmdmlz7XZlbCIKI2RlZmluZSBNRU5VX0hFTFBfSU5GTyAgICAgICAgICAgICAgICImSW5mby4uLiIKI2RlZmluZSBNRU5VX0hFTFBfQUJPVVRfV0lORSAgICAgICAgICImU29icmUgV0lORSIKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1dJTkVfSEVMUCAgICAgICAgICAgICAiQWp1ZGEgV0lORSIKI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICJFUlJPIgojZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgIkFWSVNPIgojZGVmaW5lIFNUUklOR19JTkZPICAgICAgICAgICAgICAgICAgIkluZm9ybWHn42kiCiNkZWZpbmUgU1RSSU5HX05PVF9JTVBMRU1FTlRFRCAgICAgICAiTuNvIGltcGxlbWVudGFkbyIKI2RlZmluZSBTVFJJTkdfSExQRklMRV9FUlJPUl9zICAgICAgICJGb2kgZW5jb250cmFkbyB1bSBlcnJvIGVucXVhbnRvIGxpYSBgJXMnIgojZGVmaW5lIFNUUklOR19DT05URU5UUyAgICAgICAgICAgICAgIiZDb250ZfpkbyIKI2RlZmluZSBTVFJJTkdfU0VBUkNIICAgICAgICAgICAgICAgICImUHJvY3VyYXIiCiNkZWZpbmUgU1RSSU5HX0JBQ0sgICAgICAgICAgICAgICAgICAiJlZvbHRhciIKI2RlZmluZSBTVFJJTkdfSElTVE9SWSAgICAgICAgICAgICAgICImSGlzdPNyaWNvIgojZGVmaW5lIFNUUklOR19BTExfRklMRVMgICAgICAgICAgICAgIlRvZG9zIG9zIGFycXVpdm8gKCouKikiCiNkZWZpbmUgU1RSSU5HX0hFTFBfRklMRVNfSExQICAgICAgICAiQXJxdWl2b3MgZGUgYWp1ZGEgKCouaGxwKSIKCiNpbmNsdWRlICJYeC5yYyIK