LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojaWZuZGVmIF9fTVNSTEUzMl9QUklWQVRFX0gKI2RlZmluZSBfX01TUkxFMzJfUFJJVkFURV9ICgojaWZuZGVmIFJDX0lOVk9LRUQKI2luY2x1ZGUgPHN0ZGFyZy5oPgojZW5kaWYKCiNkZWZpbmUgQ09NX05PX1dJTkRPV1NfSAojaW5jbHVkZSAid2luZGVmLmgiCiNpbmNsdWRlICJ3aW5iYXNlLmgiCiNpbmNsdWRlICJtbXN5c3RlbS5oIgojaW5jbHVkZSAid2luZ2RpLmgiCiNpbmNsdWRlICJ3aW51c2VyLmgiCiNpbmNsdWRlICJ2ZncuaCIKCiNkZWZpbmUgSURTX05BTUUgICAgICAgIDEwMAojZGVmaW5lIElEU19ERVNDUklQVElPTiAxMDEKI2RlZmluZSBJRFNfQUJPVVQgICAgICAgMTAyCgojZGVmaW5lIE1TUkxFMzJfREVGQVVMVFFVQUxJVFkgKDc1ICogSUNRVUFMSVRZX0hJR0gpIC8gMTAwCgojZGVmaW5lIEZPVVJDQ19STEUgICBtbWlvRk9VUkNDKCdSJywnTCcsJ0UnLCcgJykKI2RlZmluZSBGT1VSQ0NfUkxFNCAgbW1pb0ZPVVJDQygnUicsJ0wnLCdFJywnNCcpCiNkZWZpbmUgRk9VUkNDX1JMRTggIG1taW9GT1VSQ0MoJ1InLCdMJywnRScsJzgnKQojZGVmaW5lIEZPVVJDQ19NUkxFICBtbWlvRk9VUkNDKCdNJywnUicsJ0wnLCdFJykKCiNkZWZpbmUgV0lEVEhCWVRFUyhpKSAgICAgKChXT1JEKSgoaSszMXUpJih+MzF1KSkvOHUpIC8qIFVMT05HIGFsaWduZWQgISAqLwojZGVmaW5lIERJQldJRFRIQllURVMoYmkpIFdJRFRIQllURVMoKFdPUkQpKGJpKS5iaVdpZHRoICogKFdPUkQpKGJpKS5iaUJpdENvdW50KQoKdHlwZWRlZiBzdHJ1Y3QgX0NvZGVjSW5mbyB7CiAgRk9VUkNDICBmY2NIYW5kbGVyOwogIERXT1JEICAgZHdRdWFsaXR5OwoKICBCT09MICAgIGJDb21wcmVzczsKICBMT05HICAgIG5QcmV2RnJhbWU7CiAgTFBXT1JEICBwUHJldkZyYW1lOwogIExQV09SRCAgcEN1ckZyYW1lOwoKICBCT09MICAgIGJEZWNvbXByZXNzOwogIExQQllURSAgcGFsZXR0ZV9tYXA7Cn0gQ29kZWNJbmZvOwoKdHlwZWRlZiBjb25zdCBCSVRNQVBJTkZPSEVBREVSICogTFBDQklUTUFQSU5GT0hFQURFUjsKCiNlbmRpZgo=