LyoKICogQ29weXJpZ2h0IChDKSAxOTk4IEZyYW7nb2lzIEdvdWdldAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojaWZuZGVmIF9fV0lORV9PQkpCQVNFX0gKI2RlZmluZSBfX1dJTkVfT0JKQkFTRV9ICgojZGVmaW5lIF9PQkpCQVNFX0hfCgojaW5jbHVkZSAidW5rbnduLmgiCgovKiB0aGUgZm9sbG93aW5nIGRlcGVuZCBvbmx5IG9uIG9ial9iYXNlLmggKi8KI2luY2x1ZGUgIndpbmUvb2JqX2Jhc2UuaCIKI2luY2x1ZGUgIndpbmUvb2JqX21pc2MuaCIKI2luY2x1ZGUgIndpbmUvb2JqX2NoYW5uZWwuaCIKI2luY2x1ZGUgIndpbmUvb2JqX2NsaWVudHNlcnZlci5oIgojaW5jbHVkZSAid2luZS9vYmpfc3RvcmFnZS5oIgoKLyogdGhlIGZvbGxvd2luZyBkZXBlbmQgb24gb2JqX3N0b3JhZ2UuaCAqLwojaW5jbHVkZSAid2luZS9vYmpfbWFyc2hhbC5oIgojaW5jbHVkZSAid2luZS9vYmpfbW9uaWtlci5oIgojaW5jbHVkZSAid2luZS9vYmpfcHJvcGVydHlzdG9yYWdlLmgiCgovKiB0aGUgZm9sbG93aW5nIGRlcGVuZCBvbiBvYmpfbW9uaWtlci5oICovCiNpbmNsdWRlICJ3aW5lL29ial9kYXRhb2JqZWN0LmgiCgojaW5jbHVkZSAid2luZS9vYmpfZHJhZ2Ryb3AuaCIKCiNpZm5kZWYgUkNfSU5WT0tFRAovKiBGb3IgY29tcGF0aWJpbGl0eSBvbmx5LCBhdCBsZWFzdCBmb3Igbm93ICovCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2VuZGlmCgojaWZuZGVmIElOSVRHVUlECiNpbmNsdWRlICJjZ3VpZC5oIgojZW5kaWYKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgpIUkVTVUxUIFdJTkFQSSBHZXRDbGFzc0ZpbGUoTFBDT0xFU1RSIGZpbGVQYXRoTmFtZSxDTFNJRCAqcGNsc2lkKTsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2lmbmRlZiBfX1dJTkVfXwovKiBUaGVzZSBtYWNyb3MgYXJlIG1zZGV2J3Mgd2F5IG9mIGRlZmluaW5nIENPTSBvYmplY3RzLgogKiBUaGV5IGFyZSBwcm92aWRlZCBoZXJlIGZvciB1c2UgYnkgV2luZWxpYiBkZXZlbG9wcGVycy4KICovCiNkZWZpbmUgRkFSU1RSVUNUCiNkZWZpbmUgSFVHRVAKCiNkZWZpbmUgV0lOT0xFQVBJICAgICAgICBTVERBUEkKI2RlZmluZSBXSU5PTEVBUElfKHR5cGUpIFNUREFQSV8odHlwZSkKCiNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVmaW5lZChDSU5URVJGQUNFKQojZGVmaW5lIGludGVyZmFjZSBzdHJ1Y3QKI2RlZmluZSBTVERNRVRIT0QobWV0aG9kKSAgICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgbWV0aG9kCiNkZWZpbmUgU1RETUVUSE9EXyh0eXBlLG1ldGhvZCkgdmlydHVhbCB0eXBlIFNURE1FVEhPRENBTExUWVBFIG1ldGhvZAojZGVmaW5lIFBVUkUgICAgICAgICAgICAgICAgICAgID0gMAojZGVmaW5lIFRISVNfCiNkZWZpbmUgVEhJUyAgICAgICAgICAgICAgICAgICAgdm9pZAojZGVmaW5lIERFQ0xBUkVfSU5URVJGQUNFKGlmYWNlKSAgICBpbnRlcmZhY2UgaWZhY2UKI2RlZmluZSBERUNMQVJFX0lOVEVSRkFDRV8oaWZhY2UsIGJhc2VpZmFjZSkgICAgaW50ZXJmYWNlIGlmYWNlIDogcHVibGljIGJhc2VpZmFjZQoKI2RlZmluZSBCRUdJTl9JTlRFUkZBQ0UKI2RlZmluZSBFTkRfSU5URVJGQUNFCgojZWxzZQoKI2RlZmluZSBpbnRlcmZhY2UgICAgICAgICAgICAgICBzdHJ1Y3QKI2RlZmluZSBTVERNRVRIT0QobWV0aG9kKSAgICAgICBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFICgqbWV0aG9kKQojZGVmaW5lIFNURE1FVEhPRF8odHlwZSxtZXRob2QpIHR5cGUgU1RETUVUSE9EQ0FMTFRZUEUgKCptZXRob2QpCiNkZWZpbmUgUFVSRQojZGVmaW5lIFRISVNfICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSBGQVIqIFRoaXMsCiNkZWZpbmUgVEhJUyAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFIEZBUiogVGhpcwoKI2lmZGVmIENPTlNUX1ZUQUJMRQojdW5kZWYgQ09OU1RfVlRCTAojZGVmaW5lIENPTlNUX1ZUQkwgY29uc3QKI2RlZmluZSBERUNMQVJFX0lOVEVSRkFDRShpZmFjZSkgXAogICAgICAgICB0eXBlZGVmIGludGVyZmFjZSBpZmFjZSB7IGNvbnN0IHN0cnVjdCBpZmFjZSMjVnRibCBGQVIqIGxwVnRibDsgfSBpZmFjZTsgXAogICAgICAgICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBpZmFjZSMjVnRibCBpZmFjZSMjVnRibDsgXAogICAgICAgICBjb25zdCBzdHJ1Y3QgaWZhY2UjI1Z0YmwKI2Vsc2UKI3VuZGVmIENPTlNUX1ZUQkwKI2RlZmluZSBDT05TVF9WVEJMCiNkZWZpbmUgREVDTEFSRV9JTlRFUkZBQ0UoaWZhY2UpIFwKICAgICAgICAgdHlwZWRlZiBpbnRlcmZhY2UgaWZhY2UgeyBzdHJ1Y3QgaWZhY2UjI1Z0YmwgRkFSKiBscFZ0Ymw7IH0gaWZhY2U7IFwKICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgaWZhY2UjI1Z0YmwgaWZhY2UjI1Z0Ymw7IFwKICAgICAgICAgc3RydWN0IGlmYWNlIyNWdGJsCiNlbmRpZgojZGVmaW5lIERFQ0xBUkVfSU5URVJGQUNFXyhpZmFjZSwgYmFzZWlmYWNlKSAgICBERUNMQVJFX0lOVEVSRkFDRShpZmFjZSkKCiNkZWZpbmUgQkVHSU5fSU5URVJGQUNFCiNkZWZpbmUgRU5EX0lOVEVSRkFDRQoKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICYmICFDSU5URVJGQUNFICovCgojZW5kaWYgLyogX19XSU5FX18gKi8KCiNlbmRpZiAvKiBfX1dJTkVfT0JKQkFTRV9IICovCg==