LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogRmlubmlzaCBsYW5ndWFnZSBieSBKdXNzaSBUaXJra29uZW4gPGp0QG1vZGVlbWkuY3MudHV0LmZpPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRmkKI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDUKI2RlZmluZSBMQU5HVUFHRV9NRU5VX0lURU0gICAgICAgICAgICImU3VvbWkiCgovKiBNZW51ICovCgojZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZUaWVkb3N0byIKI2RlZmluZSBNRU5VX0ZJTEVfTkVXICAgICAgICAgICAgICAgICImVXVzaS4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImQXZhYVx0RW50ZXIiCiNkZWZpbmUgTUVOVV9GSUxFX01PVkUgICAgICAgICAgICAgICAiJlNpaXJy5C4uLlx0RjciCiNkZWZpbmUgTUVOVV9GSUxFX0NPUFkgICAgICAgICAgICAgICAiJktvcGlvaS4uLlx0RjgiCiNkZWZpbmUgTUVOVV9GSUxFX0RFTEVURSAgICAgICAgICAgICAiJlBvaXN0YVx0RGVsIgojZGVmaW5lIE1FTlVfRklMRV9BVFRSSUJVVEVTICAgICAgICAgIiZPbWluYWlzdXVkZXQuLi5cdEFsdCtFbnRlciIKI2RlZmluZSBNRU5VX0ZJTEVfRVhFQ1VURSAgICAgICAgICAgICJTdW8mcml0YS4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICImTG9wZXRhLi4uIgoKI2RlZmluZSBNRU5VX09QVElPTlMgICAgICAgICAgICAgICAgICImQXNldHVrc2V0IgojZGVmaW5lIE1FTlVfT1BUSU9OU19BVVRPX0FSUkFOR0UgICAgIiZK5HJqZXN05CBhdXRvbWFhdHRpc2VzdGkiCiNkZWZpbmUgTUVOVV9PUFRJT05TX01JTl9PTl9SVU4gICAgICAiJlBpZW5lbm7kIGvkeXRldHTkZXNz5CIKI2RlZmluZSBNRU5VX09QVElPTlNfU0FWRV9TRVRUSU5HUyAgICImVGFsbGVubmEgYXNldHVrc2V0IGxvcGV0ZXR0YWVzc2EiCgojZGVmaW5lIE1FTlVfV0lORE9XUyAgICAgICAgICAgICAgICAgIiZJa2t1bmEiCiNkZWZpbmUgTUVOVV9XSU5ET1dTX09WRVJMQVAgICAgICAgICAiJkxpbWl0dORpblx0VmFpaHRvK0Y1IgojZGVmaW5lIE1FTlVfV0lORE9XU19TSURFX0JZX1NJREUgICAgIiZWaWVyZWtr5GluXHRWYWlodG8rRjQiCiNkZWZpbmUgTUVOVV9XSU5ET1dTX0FSUkFOR0UgICAgICAgICAiJkrkcmplc3TkIGt1dmFra2VldCIKCiNkZWZpbmUgTUVOVV9MQU5HVUFHRSAgICAgICAgICAgICAgICAiJktpZWxpIgoKI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImT2hqZSIKI2RlZmluZSBNRU5VX0hFTFBfQ09OVEVOVFMgICAgICAgICAgICImU2lz5GxseXMiCiNkZWZpbmUgTUVOVV9IRUxQX1NFQVJDSCAgICAgICAgICAgICAiJkV0c2kgb2hqZSBhaWhlZXN0YS4uLiIKI2RlZmluZSBNRU5VX0hFTFBfSEVMUF9PTl9IRUxQICAgICAgICImT2hqZWVuIGvkeXR09iIKI2RlZmluZSBNRU5VX0hFTFBfVFVUT1JJQUwgICAgICAgICAgICJPJnBldHVzb2hqZWxtYSIKCiNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiVGkmZXRvamEuLi4iCiNkZWZpbmUgTUVOVV9JTkZPX0xJQ0VOU0UgICAgICAgICAgICAiJkxpc2Vuc3NpIgojZGVmaW5lIE1FTlVfSU5GT19OT19XQVJSQU5UWSAgICAgICAgIiZPTUFMTEEgVkFTVFVVTExBIgojZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgIiZUaWV0b2phIFdJTkVzdOQiCgovKiBEaWFsb2dzICovCgojZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgIk9LIgojZGVmaW5lIERJQUxPR19DQU5DRUwgICAgICAgICAgICAgICAgIlBlcnV1dGEiCiNkZWZpbmUgRElBTE9HX0JST1dTRSAgICAgICAgICAgICAgICAiJlNlbGFhIgojZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgIiZPaGplIgoKI2RlZmluZSBESUFMT0dfTkVXX0NBUFRJT04gICAgICAgICAgICJVdXNpIGlsbWVudHlt5CIKI2RlZmluZSBESUFMT0dfTkVXX05FVyAgICAgICAgICAgICAgICJVdXNpIgojZGVmaW5lIERJQUxPR19ORVdfR1JPVVAgICAgICAgICAgICAgIk9oamVsbWEmcnlobeQiCiNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAiT2hqZWxtYSYiCgojZGVmaW5lIERJQUxPR19NT1ZFX0NBUFRJT04gICAgICAgICAgIlNpaXJy5CIKI2RlZmluZSBESUFMT0dfTU9WRV9QUk9HUkFNICAgICAgICAgICJTaWlycuQgb2hqZWxtYToiCiNkZWZpbmUgRElBTE9HX01PVkVfRlJPTV9HUk9VUCAgICAgICAiUnlobeRzdOQ6IgojZGVmaW5lIERJQUxPR19NT1ZFX1RPX0dST1VQICAgICAgICAgIiZSeWht5ORuOiIKCiNkZWZpbmUgRElBTE9HX0NPUFlfQ0FQVElPTiAgICAgICAgICAiS29waW9pIgojZGVmaW5lIERJQUxPR19DT1BZX1BST0dSQU0gICAgICAgICAgIktvcGlvaSBvaGplbG1hOiIKI2RlZmluZSBESUFMT0dfQ09QWV9GUk9NX0dST1VQICAgICAgIERJQUxPR19NT1ZFX0ZST01fR1JPVVAKI2RlZmluZSBESUFMT0dfQ09QWV9UT19HUk9VUCAgICAgICAgIERJQUxPR19NT1ZFX1RPX0dST1VQCgojZGVmaW5lIERJQUxPR19HUk9VUF9DQVBUSU9OICAgICAgICAgIk9oamVsbWFyeWht5G4gb21pbmFpc3V1ZGV0IgojZGVmaW5lIERJQUxPR19HUk9VUF9ERVNDUklQVElPTiAgICAgIiZLdXZhdXM6IgojZGVmaW5lIERJQUxPR19HUk9VUF9GSUxFICAgICAgICAgICAgIiZSeWht5HRpZWRvc3RvOiIKCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fQ0FQVElPTiAgICAgICAiT2hqZWxtYW4gb21pbmFpc3V1ZGV0IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX0RFU0NSSVBUSU9OICAgRElBTE9HX0dST1VQX0RFU0NSSVBUSU9OCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FICAiSyZvbWVudG9yaXZpOiIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9ESVJFQ1RPUlkgICAgICImVHn2aGFrZW1pc3RvOiIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9IT1RfS0VZICAgICAgICImUGlrYW7kcHDkaW46IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX1NZTUJPTCAgICAgICAgIlN1byZyaXRhIGt1dmFra2VlbmEiCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fT1RIRVJfU1lNQk9MICAiJlZhaWhkYSBrdXZha2V0dGEuLi4iCgojZGVmaW5lIERJQUxPR19TWU1CT0xfQ0FQVElPTiAgICAgICAgIlZhbGl0c2Uga3V2YWtlIgojZGVmaW5lIERJQUxPR19TWU1CT0xfRklMRSAgICAgICAgICAgIiZOaW1pOiIKI2RlZmluZSBESUFMT0dfU1lNQk9MX0NVUlJFTlQgICAgICAgICJOeWt5aW5lbiAma3V2YWtlOiIKCiNkZWZpbmUgRElBTE9HX0VYRUNVVEVfQ0FQVElPTiAgICAgICAiU3Vvcml0YSBvaGplbG1hIgojZGVmaW5lIERJQUxPR19FWEVDVVRFX0NPTU1BTkRfTElORSAgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FCiNkZWZpbmUgRElBTE9HX0VYRUNVVEVfU1lNQk9MICAgICAgICBESUFMT0dfUFJPR1JBTV9TWU1CT0wKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1BST0dSQU1fTUFOQUdFUiAgICAgICAgICAgICJK5HJqZXN0ZW3kbmhhbGxpbnRhIgojZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAiVklSSEUiCiNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICJWQVJPSVRVUyIKI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIlRpZXRvamEiCiNkZWZpbmUgU1RSSU5HX0RFTEVURSAgICAgICAgICAgICAgICAgICAgICJQb2lzdGEiCiNkZWZpbmUgU1RSSU5HX0RFTEVURV9HUk9VUF9zICAgICAgICAgICAgICJQb2lzdGEgcnlobeQgYCVzJyA/IgojZGVmaW5lIFNUUklOR19ERUxFVEVfUFJPR1JBTV9zICAgICAgICAgICAiUG9pc3RhIG9oamVsbWEgYCVzJyA/IgojZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAiRWkga+R5dGV0dOR2aXNz5CIKI2RlZmluZSBTVFJJTkdfRklMRV9SRUFEX0VSUk9SX3MgICAgICAgICAgIlZpcmhlIGx1ZXR0YWVzc2EgYCVzJyIKI2RlZmluZSBTVFJJTkdfRklMRV9XUklURV9FUlJPUl9zICAgICAgICAgIlZpcmhlIGtpcmpvaXRldHRhZXNzYSBgJXMnIgoKI2RlZmluZSBTVFJJTkdfR1JQRklMRV9SRUFEX0VSUk9SX3MgICAgICAgIlwKUnlobeR0aWVkb3N0b2EgYCVzJyBlaSB2b2lkYSBhdmF0YS5cblwKWXJpdGV05ORua/YgdXVkZXN0YWFuPyIKCiNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICJNdWlzdGkgbG9wdXNzYSIKI2RlZmluZSBTVFJJTkdfV0lOSEVMUF9FUlJPUiAgICAgICAgICAgICAgIk9oamUgZWkga+R5dGV0dOR2aXNz5CIKI2RlZmluZSBTVFJJTkdfVU5LTk9XTl9GRUFUVVJFX3MgICAgICAgICAgIlR1bnRlbWF0b24gb21pbmFpc3V1cyAlczpzc2EiCiNkZWZpbmUgU1RSSU5HX0ZJTEVfTk9UX09WRVJXUklUVEVOX3MgICAgICJUaWVkb3N0byBgJXMnIG9uIG9sZW1hc3NhLiBUaWVkb3N0b2EgZWkgbXV1dGV0dHUuIgojZGVmaW5lIFNUUklOR19TQVZFX0dST1VQX0FTX3MgICAgICAgICAgICAiVGFsbGVubmEgcnlobeQgbmltZWxs5CBgJXMnIGFsa3VwZXLkaXN0ZW4gdGllZG9zdG9qZW4gc+RpbHl0dORtaXNla3NpIgoKI2RlZmluZSBTVFJJTkdfTk9fSE9UX0tFWSAgICAgICAgICAgICAgICAgIkVpIG1pdOTkbiIKCiNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAgICAgICJLYWlra2kgdGllZG9zdG90ICgqLiopIgojZGVmaW5lIFNUUklOR19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAiT2hqZWxtYXQiCiNkZWZpbmUgU1RSSU5HX0xJQlJBUklFU19ETEwgICAgICAgICAgICAgICJLaXJqYXN0b3QgKCouZGxsKSIKI2RlZmluZSBTVFJJTkdfU1lNQk9MX0ZJTEVTICAgICAgICAgICAgICAgIlN5bWJvbGl0aWVkb3N0b3QiCiNkZWZpbmUgU1RSSU5HX1NZTUJPTFNfSUNPICAgICAgICAgICAgICAgICJLdXZha2tlZXQgKCouaWNvKSIKCiNpbmNsdWRlICJYeC5yYyIK