LyoKICogIE5vdGVwYWQgKEVuZ2xpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTkgTWFyY2VsIEJhdXIgPGFsdmVzQGNvcnJlaW9uZXQuY29tLmJyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgICAgUHQKI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAgICAiJlBvcnR1Z3XqcyIKCgovKiBNZW51ICovCgojZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgICAgIiZBcnF1aXZvIgojZGVmaW5lIE1FTlVfRklMRV9ORVcgICAgICAgICAgICAgICAgICAgIiZOb3ZvLi4uIgojZGVmaW5lIE1FTlVfRklMRV9PUEVOICAgICAgICAgICAgICAgICAgIkEmYnJpciIKI2RlZmluZSBNRU5VX0ZJTEVfU0FWRSAgICAgICAgICAgICAgICAgICImU2FsdmFyIgojZGVmaW5lIE1FTlVfRklMRV9TQVZFQVMgICAgICAgICAgICAgICAgIlNhbHZhciAmY29tby4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlQgICAgICAgICAgICAgICAgICImSW1wcmltaXIiCiNkZWZpbmUgTUVOVV9GSUxFX1BBR0VTRVRVUCAgICAgICAgICAgICAiQyZvbmZpZ3VyYXIgUOFnaW5hLi4uIgojZGVmaW5lIE1FTlVfRklMRV9QUklOVFNFVFVQICAgICAgICAgICAgIkNvbmZpZ3VyYXIgSSZtcHJlc3NvcmEuLi4iCiNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAgICAiJlNhaXIiCgojZGVmaW5lIE1FTlVfRURJVCAgICAgICAgICAgICAgICAgICAgICAgIiZFZGl0YXIiCiNkZWZpbmUgTUVOVV9FRElUX1VORE8gICAgICAgICAgICAgICAgICAiJkRlc2ZhemVyXHRDdHJsK1oiCiNkZWZpbmUgTUVOVV9FRElUX0NVVCAgICAgICAgICAgICAgICAgICAiQyZvcnRhclx0Q3RybCtYIgojZGVmaW5lIE1FTlVfRURJVF9DT1BZICAgICAgICAgICAgICAgICAgIiZDb3BpYXJcdEN0cmwrQyIKI2RlZmluZSBNRU5VX0VESVRfUEFTVEUgICAgICAgICAgICAgICAgICJDbyZsYXJcdEN0cmwrViIKI2RlZmluZSBNRU5VX0VESVRfREVMRVRFICAgICAgICAgICAgICAgICImRGVsZXRlXHREZWwiCiNkZWZpbmUgTUVOVV9FRElUX1NFTEVDVEFMTCAgICAgICAgICAgICAiU2VsZWNpb25hciAmVHVkbyIKI2RlZmluZSBNRU5VX0VESVRfVElNRURBVEUgICAgICAgICAgICAgICImRGF0YS9Ib3JhXHRGNSIKI2RlZmluZSBNRU5VX0VESVRfV1JBUCAgICAgICAgICAgICAgICAgICImUXVlYnJhciBsaW5oYXMgbG9uZ2FzIgoKI2RlZmluZSBNRU5VX1NFQVJDSCAgICAgICAgICAgICAgICAgICAgICImUGVzcXVpc2EiCiNkZWZpbmUgTUVOVV9TRUFSQ0hfU0VBUkNIICAgICAgICAgICAgICAiUGVzcXVpc2FyLi4uIgojZGVmaW5lIE1FTlVfU0VBUkNIX05FWFQgICAgICAgICAgICAgICAgIiZQcm9jdXJhciBQcvN4aW1hXHRGMyIKCiNkZWZpbmUgTUVOVV9MQU5HVUFHRSAgICAgICAgICAgICAgICAgICAiJkxpbmd1YWdlbSIKCiNkZWZpbmUgTUVOVV9IRUxQICAgICAgICAgICAgICAgICAgICAgICAiJkFqdWRhIgojZGVmaW5lIE1FTlVfSEVMUF9DT05URU5UUyAgICAgICAgICAgICAgIiZDb250ZfpkbyIKI2RlZmluZSBNRU5VX0hFTFBfU0VBUkNIICAgICAgICAgICAgICAgICImUHJvY3VyYXIuLi4iCiNkZWZpbmUgTUVOVV9IRUxQX0hFTFBfT05fSEVMUCAgICAgICAgICAiJkFqdWRhIG5hIGFqdWRhIgoKI2RlZmluZSBNRU5VX0lORk8gICAgICAgICAgICAgICAgICAgICAgICJJbmYmb3JtYef1ZXMuLi4iCiNkZWZpbmUgTUVOVV9JTkZPX0xJQ0VOU0UgICAgICAgICAgICAgICAiJkxpY2Vu52EiCiNkZWZpbmUgTUVOVV9JTkZPX05PX1dBUlJBTlRZICAgICAgICAgICAiJlNFTSBHQVJBTlRJQSIKI2RlZmluZSBNRU5VX0lORk9fQUJPVVRfV0lORSAgICAgICAgICAgICImU29icmUgV2luZSIKCgovKiBEaWFsb2dzICovCgojZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgICAgIk9LIgojZGVmaW5lIERJQUxPR19DQU5DRUwgICAgICAgICAgICAgICAgICAgIkNhbmNlbGFyIgojZGVmaW5lIERJQUxPR19CUk9XU0UgICAgICAgICAgICAgICAgICAgIiZQcm9jdXJhci4uLiIKI2RlZmluZSBESUFMT0dfSEVMUCAgICAgICAgICAgICAgICAgICAgICImQWp1ZGEiCgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfQ0FQVElPTiAgICAgICAgIkNvbmZpZ3VyYXIgUOFnaW5hIgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfSEVBRCAgICAgICAgICAgIiZDYWJl52FsaG86IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfVEFJTCAgICAgICAgICAgIiZSb2RhcOk6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfTUFSR0lOICAgICAgICAgIiZNYXJnZW5zOiIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX0xFRlQgICAgICAgICAgICImRXNxdWVyZGE6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfUklHSFQgICAgICAgICAgIiZEaXJlaXRhOiIKI2RlZmluZSBESUFMT0dfUEFHRVNFVFVQX1RPUCAgICAgICAgICAgICImU3VwZXJpb3I6IgojZGVmaW5lIERJQUxPR19QQUdFU0VUVVBfQk9UVE9NICAgICAgICAgIiZJbmZlcmlvcjoiCgoKLyogU3RyaW5ncyAqLwoKI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFICAgICImbiIgICAgICAgIC8qIEZJWE1FICovCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSAgICAiUOFnaW5hICZzIiAgLyogRklYTUUgKi8KI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovCiNkZWZpbmUgU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFICAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwojZGVmaW5lIFNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUgICAgICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KI2RlZmluZSBTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCgojZGVmaW5lIFNUUklOR19OT1RFUEFEICAgICAgICAgICAgICAgICAgIk5vdGVwYWQiCiNkZWZpbmUgU1RSSU5HX0VSUk9SICAgICAgICAgICAgICAgICAgICAiRVJSTyIKI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICJBVklTTyIKI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1h5+NvIgoKI2RlZmluZSBTVFJJTkdfVU5USVRMRUQgICAgICAgICAgICAgICAgICIoc2VtIG5vbWUpIgoKI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICAgICJUb2RvcyBvcyBhcnF1aXZvcyAoKi4qKSIKI2RlZmluZSBTVFJJTkdfVEVYVF9GSUxFU19UWFQgICAgICAgICAgICJBcnF1aXZvcyB0ZXh0byAoKi50eHQpIgoKI2RlZmluZSBTVFJJTkdfVE9PTEFSR0UgICAgICAgICAiQXJxdWl2byAnJXMnIOkgbXVpdG8gbG9uZ28gcGFyYSBvIG5vdGVwYWQuXG4gXApQb3IgZmF2b3IgdXNlIHVtIGVkaXRvciBkaWZlcmVudGUuIgoKI2RlZmluZSBTVFJJTkdfTk9URVhUICAgICAgICAgICAiVm9j6iBu428gZGlnaXRvdSBuZW5odW0gdGV4dG8uIFwKXG5Qb3IgZmF2b3IgZGlnaXRlIGFsZ3VtYSBjb2lzYSBlIHRlbnRlIG5vdmFtZW50ZSIKCi8qIEZJWE1FICovCgojZGVmaW5lIFNUUklOR19ET0VTTk9URVhJU1QgICAgICJGaWxlICclcydcbmRvZXMgbm90IGV4aXN0XG5cbiBcCkRvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBmaWxlID8iCgojZGVmaW5lIFNUUklOR19OT1RTQVZFRCAgICAgICAgICJBcnF1aXZvICclcydcbmZvaSBtb2RpZmljYWRvXG5cbiBcCkdvc3RhcmlhIGRlIHNhbHZhciBhcyBhbHRlcmHn1WVzID8iCgojZGVmaW5lIFNUUklOR19OT1RGT1VORCAgICAgICAgICInJXMnIG7jbyBwb2RlIHNlciBlbmNvbnRyYWRvLiIKCiNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgIk7jbyBo4SBtZW3zcmlhIHN1ZmljaWVudGUgcGFyYSBjb21wbGV0YXIgZXNzYSBcCnRhcmVmYS4gXG5GZWNoZSB1bWEgb3UgbWFpcyBhcGxpY2Hn9WVzIHBhcmEgYXVtZW50YXIgYSBxdWFudGlkYWRlIGRlIG1lbfNyaWEgXApsaXZyZS4iCgojaW5jbHVkZSAibm90ZXBhZC5yYyIK