LyoKICogIE5vdGVwYWQgKEVuZ2xpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgUHJvb2ZyZWFkIDE5OTkgYnkgSm9zZSBNYXJjb3MgTG9wZXogPGpvc2UubG9wZXpAdXBjbmV0LnVwYy5lcz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgICAgIEVzCiNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICAgICBkCiNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAgICAiQ2FzdGVsbGFubyIKCgovKiBNZW51ICovCgojZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgICAgIiZBcmNoaXZvIgojZGVmaW5lIE1FTlVfRklMRV9ORVcgICAgICAgICAgICAgICAgICAgIiZOdWV2byIKI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICAgICImQWJyaXIiCiNkZWZpbmUgTUVOVV9GSUxFX1NBVkUgICAgICAgICAgICAgICAgICAiJkd1YXJkYXIiCiNkZWZpbmUgTUVOVV9GSUxFX1NBVkVBUyAgICAgICAgICAgICAgICAiR3VhcmRhciBjbyZtby4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfUEFHRVNFVFVQICAgICAgICAgICAgICImQ29uZmlndXJhciBw4WdpbmEuLi4iCiNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAgICAiJkltcHJpbWlyIgojZGVmaW5lIE1FTlVfRklMRV9QUklOVFNFVFVQICAgICAgICAgICAgIiZDb25maWd1cmFjafNuIGltcHJlc29yYS4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICAgICImU2FsaXIiCgojZGVmaW5lIE1FTlVfRURJVCAgICAgICAgICAgICAgICAgICAgICAgIiZFZGl0YXIiCiNkZWZpbmUgTUVOVV9FRElUX1VORE8gICAgICAgICAgICAgICAgICAiJkRlc2hhY2VyXHRDdHJsK1oiCiNkZWZpbmUgTUVOVV9FRElUX0NVVCAgICAgICAgICAgICAgICAgICAiQ29yJnRhclx0Q3RybCtYIgojZGVmaW5lIE1FTlVfRURJVF9DT1BZICAgICAgICAgICAgICAgICAgIiZDb3BpYXJcdEN0cmwrQyIKI2RlZmluZSBNRU5VX0VESVRfUEFTVEUgICAgICAgICAgICAgICAgICImUGVnYXJcdEN0cmwrViIKI2RlZmluZSBNRU5VX0VESVRfREVMRVRFICAgICAgICAgICAgICAgICImQm9ycmFyXHREZWwiCiNkZWZpbmUgTUVOVV9FRElUX1NFTEVDVEFMTCAgICAgICAgICAgICAiU2VsZWNjaW9uYXIgdCZvZG8iCiNkZWZpbmUgTUVOVV9FRElUX1RJTUVEQVRFICAgICAgICAgICAgICAiJkhvcmEgeSBGZWNoYVx0RjUiCiNkZWZpbmUgTUVOVV9FRElUX1dSQVAgICAgICAgICAgICAgICAgICAiJkFqdXN0ZSBkZSBs7W5lYSBhdXRvbeF0aWNvIgoKI2RlZmluZSBNRU5VX1NFQVJDSCAgICAgICAgICAgICAgICAgICAgICImQnVzY2FyIgojZGVmaW5lIE1FTlVfU0VBUkNIX1NFQVJDSCAgICAgICAgICAgICAgIiZCdXNjYXIuLi4iCiNkZWZpbmUgTUVOVV9TRUFSQ0hfTkVYVCAgICAgICAgICAgICAgICAiQnVzY2FyICZzaWd1aWVudGVcdEYzIgoKI2RlZmluZSBNRU5VX0xBTkdVQUdFICAgICAgICAgICAgICAgICAgICImSWRpb21hIgoKI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICAgICImQXl1ZGEiCiNkZWZpbmUgTUVOVV9IRUxQX0NPTlRFTlRTICAgICAgICAgICAgICAiJkluZGljZSIKI2RlZmluZSBNRU5VX0hFTFBfU0VBUkNIICAgICAgICAgICAgICAgICImQnVzY2FyLi4uIgojZGVmaW5lIE1FTlVfSEVMUF9IRUxQX09OX0hFTFAgICAgICAgICAgIiZBeXVkYSBzb2JyZSBsYSBheXVkYSIKCiNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAiSW5mJm9ybWFjafNuLi4uIgojZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgICAgIiZMaWNlbmNpYSIKI2RlZmluZSBNRU5VX0lORk9fTk9fV0FSUkFOVFkgICAgICAgICAgICJTSU4gJkdBUkFOVM1BIgojZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgICAgIiZBY2VyY2EgZGUgV2luZSIKCgovKiBEaWFsb2dzICovCgojZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgICAgIk9LIgojZGVmaW5lIERJQUxPR19DQU5DRUwgICAgICAgICAgICAgICAgICAgIkNhbmNlbGFyIgojZGVmaW5lIERJQUxPR19CUk9XU0UgICAgICAgICAgICAgICAgICAgIiZCdXNjYXIuLi4iCiNkZWZpbmUgRElBTE9HX0hFTFAgICAgICAgICAgICAgICAgICAgICAiJkF5dWRhIgoKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0NBUFRJT04gICAgICAgICImQWp1c3RlIGRlIHDhZ2luYSIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0hFQUQgICAgICAgICAgICImQ2FiZWNlcmE6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfVEFJTCAgICAgICAgICAgIiZQaek6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfTUFSR0lOICAgICAgICAgIiZNYXJnZW5lczoiCiNkZWZpbmUgRElBTE9HX1BBR0VTRVRVUF9MRUZUICAgICAgICAgICAiJkl6cXVpZXJkYToiCiNkZWZpbmUgRElBTE9HX1BBR0VTRVRVUF9SSUdIVCAgICAgICAgICAiJkRlcmVjaGE6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfVE9QICAgICAgICAgICAgIkEmcnJpYmE6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfQk9UVE9NICAgICAgICAgIkFiYSZqbzoiCgoKLyogU3RyaW5ncyAqLwoKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFICAgICImbiIgICAgICAgIC8qIEZJWE1FICovCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSAgICAiUOFnaW5hICZzIiAgIC8qIEZJWE1FICovCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUgICAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwojZGVmaW5lIFNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSAgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSAgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKI2RlZmluZSBTVFJJTkdfTk9URVBBRCAgICAgICAgICAgICAgICAgICJCbG9jIGRlIE5vdGFzIgojZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgIkVSUk9SIgojZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgICAgIkNVSURBRE8iCiNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYWNp824iCgojZGVmaW5lIFNUUklOR19VTlRJVExFRCAgICAgICAgICAgICAgICAgIihzaW4gdO10dWxvKSIKCiNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAgICAiVG9kb3MgbG9zIGFyY2hpdm9zICgqLiopIgojZGVmaW5lIFNUUklOR19URVhUX0ZJTEVTX1RYVCAgICAgICAgICAgIkRvY3VtZW50b3MgZGUgdGV4dG8gKCoudHh0KSIKCiNkZWZpbmUgU1RSSU5HX1RPT0xBUkdFICAgICAgICAgIkVsIGFyY2hpdm8gJyVzJyBlcyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgZWwgYmxvYyBkZSBub3Rhcy5cbiBcClVzZSBvdHJvIGVkaXRvci4iCgojZGVmaW5lIFNUUklOR19OT1RFWFQgICAgICAgICAgICJVZC4gbm8gZXNjcmliafMgbmFkYS4gXApcblBvciBmYXZvciBlc2NyaWJhIGFsZ28geSBwcnVlYmUgZGUgbnVldm8iCgovKiBGSVhNRSAqLwoKI2RlZmluZSBTVFJJTkdfRE9FU05PVEVYSVNUICAgICAiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgoKI2RlZmluZSBTVFJJTkdfTk9UU0FWRUQgICAgICAgICAiRWwgdGV4dG8gZW4gZWwgYXJjaGl2byAnJXMnIGhhIGNhbWJpYWRvXG5cbiBcCr9EZXNlYSBndWFyZGFyIGxvcyBjYW1iaW9zPyIKCiNkZWZpbmUgU1RSSU5HX05PVEZPVU5EICAgICAgICAgIm5vIHNlIGVuY29udHLzICclcycuIgoKI2RlZmluZSBTVFJJTkdfT1VUX09GX01FTU9SWSAgICAiTm8gaGF5IHN1ZmljaWVudGUgbWVtb3JpYSBwYXJhIHRlcm1pbmFyIFwKZXN0YSB0YXJlYS4gXG5DaWVycmUgdW5hIG8gbeFzIGFwbGljYWNpb25lcyBwYXJhIGF1bWVudGFyIGxhIGNhbnRpZGFkIFxuZGUgXAptZW1vcmlhIGxpYnJlLiIKCiNpbmNsdWRlICJub3RlcGFkLnJjIgo=