ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMDhhOGU0Ni4uZGFiZTJkMiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI5MSwxNCArMjkxLDE3IEBACiAJCX0KIAlALi9ta2NvbmZpZyAtYSBJY2VDdWJlIHBwYyBtcGM1eHh4IGljZWN1YmUKIAotaW5rYTR4MF9jb25maWc6CQl1bmNvbmZpZworaW5rYTR4MF9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgaW5rYTR4MCBwcGMgbXBjNXh4eCBpbmthNHgwCiAKK21jYzIwMF9jb25maWc6CXVuY29uZmlnCisJQC4vbWtjb25maWcgbWNjMjAwIHBwYyBtcGM1eHh4IG1jYzIwMAorCiBvMmRudF9jb25maWc6Ci0JQC4vbWtjb25maWcgLWEgbzJkbnQgcHBjIG1wYzV4eHggbzJkbnQKKwlALi9ta2NvbmZpZyBvMmRudCBwcGMgbXBjNXh4eCBvMmRudAogCiBwZjUyMDBfY29uZmlnOiAgdW5jb25maWcKLQlALi9ta2NvbmZpZyAtYSBwZjUyMDAgIHBwYyBtcGM1eHh4IHBmNTIwMCBlc2QKKwlALi9ta2NvbmZpZyBwZjUyMDAgIHBwYyBtcGM1eHh4IHBmNTIwMCBlc2QKIAogUE01MjBfY29uZmlnIFwKIFBNNTIwX0REUl9jb25maWcgXApkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL01ha2VmaWxlIGIvYm9hcmQvbWNjMjAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjczNGIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tY2MyMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw0NiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworLWluY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvY29uZmlnLm1rIGIvYm9hcmQvbWNjMjAwL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI3OGIxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWNjMjAwL2NvbmZpZy5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgTUNDMjAwIGJvYXJkCisjCisKK1RFWFRfQkFTRSA9IDB4ZmZmMDAwMDAKKyMgVEVYVF9CQVNFID0gMHgwMDEwMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLUkkKFRPUERJUikvYm9hcmQKZGlmZiAtLWdpdCBhL2JvYXJkL21jYzIwMC9mbGFzaC5jIGIvYm9hcmQvbWNjMjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxNzU3YQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21jYzIwMC9mbGFzaC5jCkBAIC0wLDAgKzEsNzM4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKyNpbmNsdWRlIDxmbGFzaC5oPgorCisvLyMjI0NIRDogZ2Vo9nJ0IHdpZWRlciByYXVzIGlzdCB2b20gUFhBMjcxIGZpbGUhCisjZGVmaW5lIEZMQVNIXzI4RjI1NkwxOFQgMHgwMEIwCQkvKiBJbnRlbCAyOEYyNTZMMThUICggMzJNID0gMTI4SyB4IDI1NSArIDMyayB4IDQpICovCisjZGVmaW5lIEZMQVNIXzI4RjI1NkwxOEIgMHgwMEIxCQkvKiBJbnRlbCAyOEYyNTZMMThCICggMzJNID0gMzJrIHggNCArIDEyOEsgeCAyNTUpICAqLworI2RlZmluZSBGTEFTSF8yOEYyNTZQMzBCIDB4MDAxQwkJLyogSW50ZWwgMjhGMjU2UDMwQiAoIDMyTSA9IDMyayB4IDQgKyAxMjhLIHggMjU1KSAgKi8KKyNkZWZpbmUgRkxBU0hfMjhGMjU2UDMwVCAweDAwMTkJCS8qIEludGVsIDI4RjI1NlAzMFQgKCAxMjhLIHggMjU1ICsgMzJNID0gMzJrIHggNCArICovCisKKyNkZWZpbmUgSU5URUxfSURfMjhGMDE2UyAgICAweDY2YTA2NmEwCS8qIDI4RjAxNlNbVlNdIElEICgxNk0gPSA1MTJrIHggMTYpCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjgwMEIzVCAgMHg4ODkyODg5MgkvKiAgOE0gPSA1MTJLIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjgwMEIzQiAgMHg4ODkzODg5MwkvKiAgOE0gPSA1MTJLIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjE2MEIzVCAgMHg4ODkwODg5MAkvKiAgMTZNID0gMU0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwQjNCICAweDg4OTE4ODkxCS8qICAxNk0gPSAxTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBCM1QgIDB4ODg5Njg4OTYJLyogIDMyTSA9IDJNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMEIzQiAgMHg4ODk3ODg5NwkvKiAgMzJNID0gMk0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjQwQjNUICAweDg4OTg4ODk4CS8qICA2NE0gPSA0TSB4IDE2IHRvcCBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBCM0IgIDB4ODg5OTg4OTkJLyogIDY0TSA9IDRNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjE2MEYzQiAgMHg4OEY0ODhGNAkvKiAgMTZNID0gMU0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKworI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBDM1QgIDB4ODhDMDg4QzAJLyogIDhNID0gNTEySyB4IDE2IHRvcCBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBDM0IgIDB4ODhDMTg4QzEJLyogIDhNID0gNTEySyB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBDM1QgIDB4ODhDMjg4QzIJLyogIDE2TSA9IDFNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjE2MEMzQiAgMHg4OEMzODhDMwkvKiAgMTZNID0gMU0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMzIwQzNUICAweDg4QzQ4OEM0CS8qICAzMk0gPSAyTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBDM0IgIDB4ODhDNTg4QzUJLyogIDMyTSA9IDJNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjY0MEMzVCAgMHg4OENDODhDQwkvKiAgNjRNID0gNE0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjQwQzNCICAweDg4Q0Q4OENECS8qICA2NE0gPSA0TSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworCisjZGVmaW5lIElOVEVMX0lEXzI4RjEyOEozICAgMHg4OTE4ODkxOAkvKiAgMTZNID0gOE0geCAxNiB4IDEyOCAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBKNSAgIDB4MDAxNDAwMTQJLyogIDMyTSA9IDEyOEsgeCAgMzIJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjQwSjUgICAweDAwMTUwMDE1CS8qICA2NE0gPSAxMjhLIHggIDY0CSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMEozQSAgMHgwMDE2MDAxNgkvKiAgMzJNID0gMTI4SyB4ICAzMgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBKM0EgIDB4MDAxNzAwMTcJLyogIDY0TSA9IDEyOEsgeCAgNjQJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2TDE4ICAweDg4MTA4ODEwCS8qICAzMk0gPSAxMjhLIHggMjU1CSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjEyOEozQSAgMHgwMDE4MDAxOAkvKiAxMjhNID0gMTI4SyB4IDEyOAkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZMMThUIDB4ODgwRDg4MEQJLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjI1NkwxOEIgMHg4ODEwODgxMAkvKiAyNTZNID0gIDMyayB4IDQgICArIDEyOEsgeCAyNTUgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2UDMwQiAweDg5MUM4OTFDCS8qIDI1Nk0gPSAgMzJrIHggNCAgICsgMTI4SyB4IDI1NSAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZQMzBUIDB4ODkxOTg5MTkJLyogMjU2TSA9ICAxMjhLIHggMjU1ICsgMzJrIHggNCAqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NEszICAgIDB4ODgwMTg4MDEJLyogIDY0TSA9ICAzMksgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjEyOEszICAgMHg4ODAyODgwMgkvKiAxMjhNID0gIDY0SyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2SzMgICAweDg4MDM4ODAzCS8qIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCAqLworCisjZGVmaW5lIElOVEVMX0lEXzI4RjE2MFMzICAgMHgwMEQwMDBEMAkvKiAgMTZNID0gNTEySyB4ICAzMiAoNjRrQiB4IDMyKQkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBTMyAgIDB4MDBENDAwRDQJLyogIDMyTSA9IDUxMksgeCAgNjQgKDY0a0IgeCA2NCkJKi8KKworCitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgICAgKi8KKworLyogQm9hcmQgc3VwcG9ydCBmb3IgMSBvciAyIGZsYXNoIGRldmljZXMgKi8KKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSDMyCisjdW5kZWYgRkxBU0hfUE9SVF9XSURUSDE2CisKKyNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdXNob3J0CisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9zaG9ydAorI2RlZmluZSBTV0FQKHgpICAgICAgICAgICAgICAgCQkoeCkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVsb25nCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9sb25nCisjZGVmaW5lIFNXQVAoeCkgICAgICAgICAgICAgICAJCSh4KQorI2VuZGlmCisKKy8qIEludGVsLWNvbXBhdGlibGUgZmxhc2ggSUQgKi8KKyNkZWZpbmUgSU5URUxfQ09NUEFUICAweDAwODkwMDg5CisjZGVmaW5lIElOVEVMX0FMVCAgICAgMHgwMEIwMDBCMAorCisKKworLyogSW50ZWwtY29tcGF0aWJsZSBmbGFzaCBjb21tYW5kcyAqLworI2RlZmluZSBJTlRFTF9QUk9HUkFNIDB4MDAxMDAwMTAKKyNkZWZpbmUgSU5URUxfRVJBU0UgICAweDAwMjAwMDIwCisjZGVmaW5lIElOVEVMX0NMRUFSICAgMHgwMDUwMDA1MAorI2RlZmluZSBJTlRFTF9MT0NLQklUIDB4MDA2MDAwNjAKKyNkZWZpbmUgSU5URUxfUFJPVEVDVCAweDAwMDEwMDAxCisjZGVmaW5lIElOVEVMX1NUQVRVUyAgMHgwMDcwMDA3MAorI2RlZmluZSBJTlRFTF9SRUFESUQgIDB4MDA5MDAwOTAKKyNkZWZpbmUgSU5URUxfQ09ORklSTSAweDAwRDAwMEQwCisjZGVmaW5lIElOVEVMX1JFU0VUICAgMHhGRkZGRkZGRgorCisvKiBJbnRlbC1jb21wYXRpYmxlIGZsYXNoIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIElOVEVMX0ZJTklTSEVEIDB4MDA4MDAwODAKKyNkZWZpbmUgSU5URUxfT0sgICAgICAgMHgwMDgwMDA4MAorCisjZGVmaW5lIEZQVwkgICBGTEFTSF9QT1JUX1dJRFRICisjZGVmaW5lIEZQV1YgICBGTEFTSF9QT1JUX1dJRFRIVgorCisjZGVmaW5lIG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorCisvLy8jIyNDSEQ6IGF1Y2ggd2llZGVyIHJhdXMhICsgc3dpdGNoIGFud2Vpc3VuZyBm/HIgZGVuIFAzMGlnZXIhCisvKiBGbGFzaCBPcmdhbml6YXRpb24gU3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBPcmdEZWYgeworCXVuc2lnbmVkIGludCBzZWN0b3JfbnVtYmVyOworCXVuc2lnbmVkIGludCBzZWN0b3Jfc2l6ZTsKK30gT3JnRGVmOworCisvKiBGbGFzaCBPcmdhbml6YXRpb25zICovCitPcmdEZWYgT3JnSW50ZWxfMjhGMjU2TDE4QltdID0geworCXs0LCAweDgwMDB9LAkJCS8qIDQgKiAzMmtCeXRlcyBzZWN0b3JzICovCisJezI1NSwgMHgyMDAwMH0sCQkJLyogMjU1ICogMTI4a0J5dGVzIHNlY3RvcnMgKi8KK307CisKK09yZ0RlZiBPcmdJbnRlbF8yOEYyNTZMMThUW10gPSB7CisJezI1NSwgMHgyMDAwMH0sCQkJLyogMjU1ICogMTI4a0J5dGVzIHNlY3RvcnMgKi8KKwl7NCwgMHg4MDAwfQkJCS8qIDQgKiAzMmtCeXRlcyBzZWN0b3JzICovCit9OworCitPcmdEZWYgT3JnSW50ZWxfMjhGMTI4SjNBW10gPSB7CisJezEyOCwgMHgyMDAwMH0sCQkJLyogMTI4ICogMTI4a0J5dGVzIHNlY3RvcnMgKi8KK307CitzdGF0aWMgdW5zaWduZWQgaW50IE9yZ1NlY3RUeXBlTnVtXzI4RjI1NkwxOCA9IDI7CitzdGF0aWMgdW5zaWduZWQgaW50IE9yZ1NlY3RUeXBlTnVtXzI4RjI1NkozID0gMTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOworc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIEZQVyBkYXRhKTsKK3N0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCk7CitzdGF0aWMgdm9pZCBmbGFzaF9zeW5jX3JlYWxfcHJvdGVjdCAoZmxhc2hfaW5mb190ICogaW5mbyk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBpbnRlbF9zZWN0b3JfcHJvdGVjdGVkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVzaG9ydCBzZWN0b3IpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQoreworCWludCBpOworCXVsb25nIHNpemUgPSAwOworCWV4dGVybiB2b2lkIGZsYXNoX3ByZWluaXQodm9pZCk7CisJZXh0ZXJuIHZvaWQgZmxhc2hfYWZ0ZXJpbml0KHVsb25nLCB1bG9uZyk7CisJdWxvbmcgZmxhc2hiYXNlID0gQ0ZHX0ZMQVNIX0JBU0U7CisKKwlmbGFzaF9wcmVpbml0KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQltZW1zZXQoJmZsYXNoX2luZm9baV0sIDAsIHNpemVvZihmbGFzaF9pbmZvX3QpKTsKKwkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIGZsYXNoYmFzZSwgJmZsYXNoX2luZm9baV0pOworCQkJZmxhc2hfZ2V0X29mZnNldHMgKGZsYXNoX2luZm9baV0uc3RhcnRbMF0sICZmbGFzaF9pbmZvW2ldKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMgKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCisJCS8qIGdldCB0aGUgaC93IGFuZCBzL3cgcHJvdGVjdGlvbiBzdGF0dXMgaW4gc3luYyAqLworCQlmbGFzaF9zeW5jX3JlYWxfcHJvdGVjdCgmZmxhc2hfaW5mb1tpXSk7CisJfQorCisJLyogUHJvdGVjdCBtb25pdG9yIGFuZCBlbnZpcm9ubWVudCBzZWN0b3JzCisJICovCisjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRQorI2lmbmRlZiBDT05GSUdfQk9PVF9ST00KKwlmbGFzaF9wcm90ZWN0ICggRkxBR19QUk9URUNUX1NFVCwKKwkJCUNGR19NT05JVE9SX0JBU0UsCisJCQlDRkdfTU9OSVRPUl9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLAorCQkJJmZsYXNoX2luZm9bMF0gKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZglDRkdfRU5WX0lTX0lOX0ZMQVNICisJZmxhc2hfcHJvdGVjdCAoIEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRU5WX0FERFIsCisJCQlDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSApOworI2VuZGlmCisKKwlmbGFzaF9hZnRlcmluaXQoZmxhc2hfaW5mb1swXS5zdGFydFswXSwgZmxhc2hfaW5mb1swXS5zaXplKTsKKworCXJldHVybiBzaXplOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJaW50IGk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlyZXR1cm47CisJfQorCisJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKTsKKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaTsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlwcmludGYgKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfMjhGMTI4SjNBOgorCQlwcmludGYgKCIyOEYxMjhKM0FcbiIpOworCQlicmVhazsKKworCWNhc2UgRkxBU0hfMjhGNjQwSjNBOgorCQlwcmludGYgKCIyOEY2NDBKM0FcbiIpOworCQlicmVhazsKKworCWNhc2UgRkxBU0hfMjhGMzIwSjNBOgorCQlwcmludGYgKCIyOEYzMjBKM0FcbiIpOworCQlicmVhazsKKworCWNhc2UgRkxBU0hfMjhGMjU2UDMwVDoKKwkJcHJpbnRmICgiRkxBU0hfMjhGMjU2UDMwVFxuIik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQlicmVhazsKKwl9CisKKwlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAorCQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKworCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwkJaWYgKChpICUgNSkgPT0gMCkKKwkJCXByaW50ZiAoIlxuICAgIik7CisJCXByaW50ZiAoIiAlMDhsWCVzIiwKKwkJCWluZm8tPnN0YXJ0W2ldLAorCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQorICovCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKQoreworCXZvbGF0aWxlIEZQVyB2YWx1ZTsKKworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMEFBMDBBQTsKKwlhZGRyWzB4MkFBQV0gPSAoRlBXKSAweDAwNTUwMDU1OworCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDA5MDAwOTA7CisKKwltYiAoKTsKKwl1ZGVsYXkoMTAwKTsKKworCXZhbHVlID0gYWRkclswXTsKKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJaW5mby0+c2l6ZSA9IDA7CisJCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRCAgICAgICAgKi8KKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfSURfMjhGMTI4SjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0U7CisJCWJyZWFrOwkJCQkvKiA9PiAzMiBNQiAgICAgKi8KKworCWNhc2UgKEZQVykgSU5URUxfSURfMjhGNjQwSjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEY2NDBKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OworCQlpbmZvLT5zaXplID0gMHgwMTAwMDAwMDsKKwkJaW5mby0+c3RhcnRbMF0gPSBDRkdfRkxBU0hfQkFTRSArIDB4MDEwMDAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiAxNiBNQiAgICAgKi8KKworCWNhc2UgKEZQVykgKElOVEVMX0lEXzI4RjI1NlAzMFQpOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYyNTZMMThCOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7Ly9mYWxzY2ghISEKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0U7CisJCWRlYnVnICgiSW50ZWwgU3RyYXRhRmxhc2ggMjhGMjU2UDMwVCBkZXZpY2UgaW5pdGlhbGl6ZWRcbiIpOworCQlicmVhazsJCQkvKiA9PiAzMiBNQgkqLworCisJY2FzZSAoRlBXKSBJTlRFTF9JRF8yOEYzMjBKM0E6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjMyMEozQTsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7CisJCWluZm8tPnNpemUgPSAweDgwMDAwMDsKKwkJaW5mby0+c3RhcnRbMF0gPSBDRkdfRkxBU0hfQkFTRSArIDB4MDE4MDAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiA4IE1CICAgICAqLworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ0ZHX01BWF9GTEFTSF9TRUNUKSB7CisJCXByaW50ZiAoIioqIEVSUk9SOiBzZWN0b3IgY291bnQgJWQgPiBtYXggKCVkKSAqKlxuIiwKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCwgQ0ZHX01BWF9GTEFTSF9TRUNUKTsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gQ0ZHX01BWF9GTEFTSF9TRUNUOworCX0KKworCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgdS1ib290IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uIHN0YXR1cworICogKGZsYXNoX2luZm9fdC5wcm90ZWN0W10pIGluIHN5bmMgd2l0aCB0aGUgc2VjdG9yIHByb3RlY3Rpb24KKyAqIHN0YXR1cyBzdG9yZWQgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGZsYXNoX3N5bmNfcmVhbF9wcm90ZWN0IChmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCWludCBpOworCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisKKwljYXNlIEZMQVNIXzI4RjEyOEozQToKKwljYXNlIEZMQVNIXzI4RjY0MEozQToKKwljYXNlIEZMQVNIXzI4RjMyMEozQToKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CisJCQlpbmZvLT5wcm90ZWN0W2ldID0gaW50ZWxfc2VjdG9yX3Byb3RlY3RlZChpbmZvLCBpKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBubyBoL3cgcHJvdGVjdCBzdXBwb3J0ICovCisJCWJyZWFrOworCX0KK30KKworCisvKgorICogY2hlY2tzIGlmICJzZWN0b3IiIGluIGJhbmsgImluZm8iIGlzIHByb3RlY3RlZC4gU2hvdWxkIHdvcmsgb24gaW50ZWwKKyAqIHN0cmF0YSBmbGFzaCBjaGlwcyAyOEZ4eHhKM3ggaW4gOC1iaXQgbW9kZS4KKyAqIFJldHVybnMgMSBpZiBzZWN0b3IgaXMgcHJvdGVjdGVkIChvciB0aW1lZC1vdXQgd2hpbGUgdHJ5aW5nIHRvIHJlYWQKKyAqIHByb3RlY3Rpb24gc3RhdHVzKSwgMCBpZiBpdCBpcyBub3QuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGludGVsX3NlY3Rvcl9wcm90ZWN0ZWQgKGZsYXNoX2luZm9fdCAqaW5mbywgdXNob3J0IHNlY3RvcikKK3sKKwlGUFdWICphZGRyOworCUZQV1YgKmxvY2tfY29uZl9hZGRyOworCXVsb25nIHN0YXJ0OworCXVuc2lnbmVkIGNoYXIgcmV0OworCisJLyoKKwkgKiBmaXJzdCwgd2FpdCBmb3IgdGhlIFdTTSB0byBiZSBmaW5pc2hlZC4gVGhlIHJhdGlvbmFsZSBmb3IKKwkgKiB3YWl0aW5nIGZvciB0aGUgV1NNIHRvIGJlY29tZSBpZGxlIGZvciBhdCBtb3N0CisJICogQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgaXMgYXMgZm9sbG93cy4gVGhlIFdTTSBjYW4gYmUgYnVzeQorCSAqIGJlY2F1c2Ugb2Y6ICgxKSBlcmFzZSwgKDIpIHByb2dyYW0gb3IgKDMpIGxvY2sgYml0CisJICogY29uZmlndXJhdGlvbi4gU28gd2UganVzdCB3YWl0IGZvciB0aGUgbG9uZ2VzdCB0aW1lb3V0IG9mCisJICogdGhlICgxKS0oMyksIGkuZS4gdGhlIGVyYXNlIHRpbWVvdXQuCisJICovCisKKwkvKiB3YWl0IGF0IGxlYXN0IDM1bnMgKFcxMikgYmVmb3JlIGlzc3VpbmcgUmVhZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1ZGVsYXkoMSk7CisJYWRkciA9IChGUFdWICopIGluZm8tPnN0YXJ0W3NlY3Rvcl07CisJKmFkZHIgPSAoRlBXKSBJTlRFTF9TVEFUVVM7CisKKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJd2hpbGUgKCgqYWRkciAmIChGUFcpIElOVEVMX0ZJTklTSEVEKSAhPSAoRlBXKSBJTlRFTF9GSU5JU0hFRCkgeworCQlpZiAoZ2V0X3RpbWVyIChzdGFydCkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJKmFkZHIgPSAoRlBXKSBJTlRFTF9SRVNFVDsgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJCXByaW50ZigiV1NNIGJ1c3kgdG9vIGxvbmcsIGNhbid0IGdldCBwcm90IHN0YXR1c1xuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qIGlzc3VlIHRoZSBSZWFkIElkZW50aWZpZXIgQ29kZXMgY29tbWFuZCAqLworCSphZGRyID0gKEZQVykgSU5URUxfUkVBRElEOworCisJLyogd2FpdCBhdCBsZWFzdCAzNW5zIChXMTIpIGJlZm9yZSByZWFkaW5nICovCisJdWRlbGF5KDEpOworCisJLyogSW50ZWwgZXhhbXBsZSBjb2RlIHVzZXMgb2Zmc2V0IG9mIDIgZm9yIDE2IGJpdCBmbGFzaCAqLworCWxvY2tfY29uZl9hZGRyID0gKEZQV1YgKikgaW5mby0+c3RhcnRbc2VjdG9yXSArIDI7CisJcmV0ID0gKCpsb2NrX2NvbmZfYWRkciAmIChGUFcpIElOVEVMX1BST1RFQ1QpID8gMSA6IDA7CisKKwkvKiBwdXQgZmxhc2ggYmFjayBpbiByZWFkIG1vZGUgKi8KKwkqYWRkciA9IChGUFcpIElOVEVMX1JFU0VUOworCisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlpbnQgZmxhZywgcHJvdCwgc2VjdDsKKwl1bG9uZyB0eXBlLCBzdGFydCwgbGFzdDsKKwlpbnQgcmNvZGUgPSAwOworCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwl0eXBlID0gKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spOworCWlmICgodHlwZSAhPSBGTEFTSF9NQU5fSU5URUwpKSB7CisJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCisJCQlpbmZvLT5mbGFzaF9pZCk7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJCXByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisJc3RhcnQgPSBnZXRfdGltZXIgKDApOworCWxhc3QgPSBzdGFydDsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCUZQV1YgKmFkZHIgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCQkJRlBXIHN0YXR1czsKKworCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKKworCQkJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwkJCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJCQkqYWRkciA9IChGUFcpIDB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwMjAwMDIwOwkvKiBlcmFzZSBzZXR1cCAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOwkvKiBlcmFzZSBjb25maXJtICovCisKKwkJCXdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKKwkJCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCQkJCQkqYWRkciA9IChGUFcpIDB4MDBCMDAwQjA7CS8qIHN1c3BlbmQgZXJhc2UgICAgICovCisJCQkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisJCQkJCXJjb2RlID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkqYWRkciA9IDB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjbWQuICAgKi8KKwkJCSphZGRyID0gMHgwMEZGMDBGRjsJLyogcmVzZXN0IHRvIHJlYWQgbW9kZSAgICAgICAgICAqLworCisJCQlwcmludGYgKCIgZG9uZVxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJjb2RlOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKiA0IC0gRmxhc2ggbm90IGlkZW50aWZpZWQKKyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgY3AsIHdwOworCUZQVyBkYXRhOworCWludCBjb3VudCwgaSwgbCwgcmMsIHBvcnRfd2lkdGg7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlyZXR1cm4gNDsKKwl9CisvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KKyNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKKwl3cCA9IChhZGRyICYgfjEpOworCXBvcnRfd2lkdGggPSAyOworI2Vsc2UKKwl3cCA9IChhZGRyICYgfjMpOworCXBvcnRfd2lkdGggPSA0OworI2VuZGlmCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwkJfQorCQlmb3IgKDsgaSA8IHBvcnRfd2lkdGggJiYgY250ID4gMDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCQktLWNudDsKKwkJCSsrY3A7CisJCX0KKwkJZm9yICg7IGNudCA9PSAwICYmIGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwkJfQorCisJCWlmICgocmMgPSB3cml0ZV9kYXRhIChpbmZvLCB3cCwgU1dBUCAoZGF0YSkpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCArPSBwb3J0X3dpZHRoOworCX0KKworCS8qCisJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CisJICovCisJY291bnQgPSAwOworCXdoaWxlIChjbnQgPj0gcG9ydF93aWR0aCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHBvcnRfd2lkdGg7ICsraSkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQl9CisJCWlmICgocmMgPSB3cml0ZV9kYXRhIChpbmZvLCB3cCwgU1dBUCAoZGF0YSkpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCArPSBwb3J0X3dpZHRoOworCQljbnQgLT0gcG9ydF93aWR0aDsKKwkJaWYgKGNvdW50KysgPiAweDgwMCkgeworCQkJc3Bpbl93aGVlbCAoKTsKKwkJCWNvdW50ID0gMDsKKwkJfQorCX0KKworCWlmIChjbnQgPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCisJICovCisJZGF0YSA9IDA7CisJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IHBvcnRfd2lkdGggJiYgY250ID4gMDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJLS1jbnQ7CisJfQorCWZvciAoOyBpIDwgcG9ydF93aWR0aDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKKwl9CisKKwlyZXR1cm4gKHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgb3IgaGFsZndvcmQgdG8gRmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitzdGF0aWMgaW50IHdyaXRlX2RhdGEgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCit7CisJRlBXViAqYWRkciA9IChGUFdWICopIGRlc3Q7CisJdWxvbmcgc3RhdHVzOworCXVsb25nIHN0YXJ0OworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJWx4KVxuIiwgKHVsb25nKSBhZGRyLCAqYWRkcik7CisJCXJldHVybiAoMik7CisJfQorCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwkqYWRkciA9IChGUFcpIDB4MDA0MDAwNDA7CS8qIHdyaXRlIHNldHVwICovCisJKmFkZHIgPSBkYXRhOworCisJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwlzdGFydCA9IGdldF90aW1lcigwKTsKKworCS8qIHdhaXQgd2hpbGUgcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJd2hpbGUgKCgoc3RhdHVzID0gKmFkZHIpICYgKEZQVykgMHgwMDgwMDA4MCkgIT0gKEZQVykgMHgwMDgwMDA4MCkgeworCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCisJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCkKK3sKKwlzdGF0aWMgaW50IHAgPSAwOworCXN0YXRpYyBjaGFyIHdbXSA9ICJcXC8tIjsKKworCXByaW50ZiAoIlwwMTAlYyIsIHdbcF0pOworCSgrK3AgPT0gMykgPyAocCA9IDApIDogMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2V0L0NsZWFyIHNlY3RvcidzIGxvY2sgYml0LCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gRXJyb3IgKHRpbWVvdXQsIHZvbHRhZ2UgcHJvYmxlbXMsIGV0Yy4pCisgKi8KK2ludCBmbGFzaF9yZWFsX3Byb3RlY3QgKGZsYXNoX2luZm9fdCAqaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQoreworCXVsb25nIHN0YXJ0OworCWludCBpOworCWludCByYyA9IDA7CisJdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0W3NlY3Rvcl0pOworCWludCBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkqYWRkciA9IElOVEVMX0NMRUFSOwkvKiBDbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlpZiAocHJvdCkgewkJCS8qIFNldCBzZWN0b3IgbG9jayBiaXQgKi8KKwkJKmFkZHIgPSBJTlRFTF9MT0NLQklUOwkvKiBTZWN0b3IgbG9jayBiaXQgKi8KKwkJKmFkZHIgPSBJTlRFTF9QUk9URUNUOwkvKiBzZXQgKi8KKwl9CisJZWxzZSB7CQkJCS8qIENsZWFyIHNlY3RvciBsb2NrIGJpdCAqLworCQkqYWRkciA9IElOVEVMX0xPQ0tCSVQ7CS8qIEFsbCBzZWN0b3JzIGxvY2sgYml0cyAqLworCQkqYWRkciA9IElOVEVMX0NPTkZJUk07CS8qIGNsZWFyICovCisJfQorCisJc3RhcnQgPSBnZXRfdGltZXIoMCk7CisKKwl3aGlsZSAoKCphZGRyICYgSU5URUxfRklOSVNIRUQpICE9IElOVEVMX0ZJTklTSEVEKSB7CisJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1VOTE9DS19UT1VUKSB7CisJCQlwcmludGYoIkZsYXNoIGxvY2sgYml0IG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIpOworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKmFkZHIgIT0gSU5URUxfT0spIHsKKwkJcHJpbnRmKCJGbGFzaCBsb2NrIGJpdCBvcGVyYXRpb24gZmFpbGVkIGF0ICUwOFgsIENTUj0lMDhYXG4iLAorCQkgICAgICAgKHVpbnQpYWRkciwgKHVpbnQpKmFkZHIpOworCQlyYyA9IDE7CisJfQorCisJaWYgKCFyYykKKwkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gcHJvdDsKKworCS8qCisJICogQ2xlYXIgbG9jayBiaXQgY29tbWFuZCBjbGVhcnMgYWxsIHNlY3RvcnMgbG9jayBiaXRzLCBzbworCSAqIHdlIGhhdmUgdG8gcmVzdG9yZSBsb2NrIGJpdHMgb2YgcHJvdGVjdGVkIHNlY3RvcnMuCisJICogV0FSTklORzogY29kZSBiZWxvdyByZS1sb2NrcyBzZWN0b3JzIG9ubHkgZm9yIG9uZSBiYW5rIChpbmZvKS4KKwkgKiBUaGlzIGNhdXNlcyBwcm9ibGVtcyBvbiBib2FyZHMgd2hlcmUgc2V2ZXJhbCBiYW5rcyBzaGFyZQorCSAqIHRoZSBzYW1lIGNoaXAsIGFzIHNlY3RvcnMgaW4gb3RoZXJlIGJhbmtzIHdpbGwgYmUgdW5sb2NrZWQKKwkgKiBidXQgbm90IHJlLWxvY2tlZC4gSXQgd29ya3MgZmluZSBvbiBwbTUyMCB0aG91Z2gsIGFzIHRoZXJlCisJICogaXMgb25seSBvbmUgY2hpcCBhbmQgb25lIGJhbmsuCisJICovCisJaWYgKCFwcm90KQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCQl7CisJCQlpZiAoaW5mby0+cHJvdGVjdFtpXSkKKwkJCXsKKwkJCQlzdGFydCA9IGdldF90aW1lcigwKTsKKwkJCQlhZGRyID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbaV0pOworCQkJCSphZGRyID0gSU5URUxfTE9DS0JJVDsJLyogU2VjdG9yIGxvY2sgYml0ICovCisJCQkJKmFkZHIgPSBJTlRFTF9QUk9URUNUOwkvKiBzZXQgKi8KKwkJCQl3aGlsZSAoKCphZGRyICYgSU5URUxfRklOSVNIRUQpICE9IElOVEVMX0ZJTklTSEVEKQorCQkJCXsKKwkJCQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfVU5MT0NLX1RPVVQpCisJCQkJCXsKKwkJCQkJCXByaW50ZigiRmxhc2ggbG9jayBiaXQgb3BlcmF0aW9uIHRpbWVkIG91dFxuIik7CisJCQkJCQlyYyA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkvKgorCQkgKiBnZXQgdGhlIHMvdyBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMgaW4gc3luYyB3aXRoIHRoZSBoL3csCisJCSAqIGluIGNhc2Ugc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIHRoZSByZS1sb2NraW5nLgorCQkgKi8KKwkJZmxhc2hfc3luY19yZWFsX3Byb3RlY3QoaW5mbyk7IC8qIHJlc2V0cyBmbGFzaCB0byByZWFkICBtb2RlICovCisJfQorCisJaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkqYWRkciA9IElOVEVMX1JFU0VUOwkJLyogUmVzZXQgdG8gcmVhZCBhcnJheSBtb2RlICovCisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvZmxhc2guaCBiL2JvYXJkL21jYzIwMC9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYzVkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tY2MyMDAvZmxhc2guaApAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCis4ICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9GTEFTSF9IXworI2RlZmluZSBfRkxBU0hfSF8KKworI2lmbmRlZiBDRkdfTk9fRkxBU0gKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIEluZm86IGNvbnRhaW5zIGNoaXAgc3BlY2lmaWMgZGF0YSwgcGVyIEZMQVNIIGJhbmsKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdWxvbmcJc2l6ZTsJCQkvKiB0b3RhbCBiYW5rIHNpemUgaW4gYnl0ZXMJCSovCisJdXNob3J0CXNlY3Rvcl9jb3VudDsJCS8qIG51bWJlciBvZiBlcmFzZSB1bml0cwkJKi8KKwl1bG9uZwlmbGFzaF9pZDsJCS8qIGNvbWJpbmVkIGRldmljZSAmIG1hbnVmYWN0dXJlciBjb2RlCSovCisJdWxvbmcJc3RhcnRbQ0ZHX01BWF9GTEFTSF9TRUNUXTsgICAvKiBwaHlzaWNhbCBzZWN0b3Igc3RhcnQgYWRkcmVzc2VzICovCisJdWNoYXIJcHJvdGVjdFtDRkdfTUFYX0ZMQVNIX1NFQ1RdOyAvKiBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMJKi8KKyNpZmRlZiBDRkdfRkxBU0hfQ0ZJCisJdWNoYXIJcG9ydHdpZHRoOwkJLyogdGhlIHdpZHRoIG9mIHRoZSBwb3J0CQkqLworCXVjaGFyCWNoaXB3aWR0aDsJCS8qIHRoZSB3aWR0aCBvZiB0aGUgY2hpcAkJKi8KKwl1c2hvcnQJYnVmZmVyX3NpemU7CQkvKiAjIG9mIGJ5dGVzIGluIHdyaXRlIGJ1ZmZlcgkJKi8KKwl1bG9uZwllcmFzZV9ibGtfdG91dDsJCS8qIG1heGltdW0gYmxvY2sgZXJhc2UgdGltZW91dAkJKi8KKwl1bG9uZwl3cml0ZV90b3V0OwkJLyogbWF4aW11bSB3cml0ZSB0aW1lb3V0CQkqLworCXVsb25nCWJ1ZmZlcl93cml0ZV90b3V0OwkvKiBtYXhpbXVtIGJ1ZmZlciB3cml0ZSB0aW1lb3V0CQkqLworCXVzaG9ydAl2ZW5kb3I7CQkJLyogdGhlIHByaW1hcnkgdmVuZG9yIGlkCQkqLworCXVzaG9ydAljbWRfcmVzZXQ7CQkvKiBWZW5kb3Igc3BlY2lmaWMgcmVzZXQgY29tbWFuZAkqLworCXVzaG9ydAlpbnRlcmZhY2U7CQkvKiB1c2VkIGZvciB4OC94MTYgYWRqdXN0bWVudHMJCSovCisjZW5kaWYKK30gZmxhc2hfaW5mb190OworCisvKgorICogVmFsdWVzIGZvciB0aGUgd2lkdGggb2YgdGhlIHBvcnQKKyAqLworI2RlZmluZSBGTEFTSF9DRklfOEJJVAkJMHgwMQorI2RlZmluZSBGTEFTSF9DRklfMTZCSVQJCTB4MDIKKyNkZWZpbmUgRkxBU0hfQ0ZJXzMyQklUCQkweDA0CisjZGVmaW5lIEZMQVNIX0NGSV82NEJJVAkJMHgwOAorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIHdpZHRoIG9mIHRoZSBjaGlwCisgKi8KKyNkZWZpbmUgRkxBU0hfQ0ZJX0JZOAkJMHgwMQorI2RlZmluZSBGTEFTSF9DRklfQlkxNgkJMHgwMgorI2RlZmluZSBGTEFTSF9DRklfQlkzMgkJMHgwNAorI2RlZmluZSBGTEFTSF9DRklfQlk2NAkJMHgwOAorLyogY29udmVydCBiZXR3ZWVuIGJpdCB2YWx1ZSBhbmQgbnVtZXJpYyB2YWx1ZSAqLworI2RlZmluZSBDRklfRkxBU0hfU0hJRlRfV0lEVEgJMworLyoKKyAqIFZhbHVlcyBmb3IgdGhlIGZsYXNoIGRldmljZSBpbnRlcmZhY2UKKyAqLworI2RlZmluZSBGTEFTSF9DRklfWDgJCTB4MDAKKyNkZWZpbmUgRkxBU0hfQ0ZJX1gxNgkJMHgwMQorI2RlZmluZSBGTEFTSF9DRklfWDhYMTYJCTB4MDIKKworLyogY29udmVydCBiZXR3ZWVuIGJpdCB2YWx1ZSBhbmQgbnVtZXJpYyB2YWx1ZSAqLworI2RlZmluZSBDRklfRkxBU0hfU0hJRlRfV0lEVEgJMworLyogUHJvdG90eXBlcyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqKTsKK2V4dGVybiBpbnQgZmxhc2hfZXJhc2UJKGZsYXNoX2luZm9fdCAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IGZsYXNoX3NlY3RfZXJhc2UgKHVsb25nIGFkZHJfZmlyc3QsIHVsb25nIGFkZHJfbGFzdCk7CitleHRlcm4gaW50IGZsYXNoX3NlY3RfcHJvdGVjdCAoaW50IGZsYWcsIHVsb25nIGFkZHJfZmlyc3QsIHVsb25nIGFkZHJfbGFzdCk7CisKKy8qIGNvbW1vbi9mbGFzaC5jICovCitleHRlcm4gdm9pZCBmbGFzaF9wcm90ZWN0IChpbnQgZmxhZywgdWxvbmcgZnJvbSwgdWxvbmcgdG8sIGZsYXNoX2luZm9fdCAqaW5mbyk7CitleHRlcm4gaW50IGZsYXNoX3dyaXRlICh1Y2hhciAqLCB1bG9uZywgdWxvbmcpOworZXh0ZXJuIGZsYXNoX2luZm9fdCAqYWRkcjJpbmZvICh1bG9uZyk7CitleHRlcm4gaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KTsKKworLyogYm9hcmQvPy9mbGFzaC5jICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfUFJPVEVDVElPTikKK2V4dGVybiBpbnQgZmxhc2hfcmVhbF9wcm90ZWN0KGZsYXNoX2luZm9fdCAqaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KTsKK2V4dGVybiB2b2lkIGZsYXNoX3JlYWRfdXNlcl9zZXJpYWwoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxlbik7CitleHRlcm4gdm9pZCBmbGFzaF9yZWFkX2ZhY3Rvcnlfc2VyaWFsKGZsYXNoX2luZm9fdCAqIGluZm8sIHZvaWQgKiBidWZmZXIsIGludCBvZmZzZXQsIGludCBsZW4pOworI2VuZGlmCS8qIENGR19GTEFTSF9QUk9URUNUSU9OICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJldHVybiBjb2RlcyBmcm9tIGZsYXNoX3dyaXRlKCk6CisgKi8KKyNkZWZpbmUgRVJSX09LCQkJCTAKKyNkZWZpbmUgRVJSX1RJTU9VVAkJCTEKKyNkZWZpbmUgRVJSX05PVF9FUkFTRUQJCQkyCisjZGVmaW5lIEVSUl9QUk9URUNURUQJCQk0CisjZGVmaW5lIEVSUl9JTlZBTAkJCTgKKyNkZWZpbmUgRVJSX0FMSUdOCQkJMTYKKyNkZWZpbmUgRVJSX1VOS05PV05fRkxBU0hfVkVORE9SCTMyCisjZGVmaW5lIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEUJCTY0CisjZGVmaW5lIEVSUl9QUk9HX0VSUk9SCQkJMTI4CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFByb3RlY3Rpb24gRmxhZ3MgZm9yIGZsYXNoX3Byb3RlY3QoKToKKyAqLworI2RlZmluZSBGTEFHX1BST1RFQ1RfU0VUCTB4MDEKKyNkZWZpbmUgRkxBR19QUk9URUNUX0NMRUFSCTB4MDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGV2aWNlIElEcworICovCisKKyNkZWZpbmUgQU1EX01BTlVGQUNUCTB4MDAwMTAwMDEJLyogQU1ECSAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCisjZGVmaW5lIEZVSl9NQU5VRkFDVAkweDAwMDQwMDA0CS8qIEZVSklUU1UgbWFudWYuIElEIGluIEQyMy4uRDE2LCBENy4uRDAgKi8KKyNkZWZpbmUgQVRNX01BTlVGQUNUCTB4MDAxRjAwMUYJLyogQVRNRUwgKi8KKyNkZWZpbmUgU1RNX01BTlVGQUNUCTB4MDAyMDAwMjAJLyogU1RNIChUaG9tc29uKSBtYW51Zi4gSUQgaW4gRDIzLi4gLSItICovCisjZGVmaW5lIFNTVF9NQU5VRkFDVAkweDAwQkYwMEJGCS8qIFNTVAkgICBtYW51Zi4gSUQgaW4gRDIzLi5EMTYsIEQ3Li5EMCAqLworI2RlZmluZSBNVF9NQU5VRkFDVAkweDAwODkwMDg5CS8qIE1UCSAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCisjZGVmaW5lIElOVEVMX01BTlVGQUNUCTB4MDA4OTAwODkJLyogSU5URUwgICBtYW51Zi4gSUQgaW4gRDIzLi5EMTYsIEQ3Li5EMCAqLworI2RlZmluZSBJTlRFTF9BTFRfTUFOVQkweDAwQjAwMEIwCS8qIGFsdGVybmF0ZSBJTlRFTCBuYW11ZmFjdHVyZXIgSUQJKi8KKyNkZWZpbmUgTVhfTUFOVUZBQ1QJMHgwMEMyMDBDMgkvKiBNWElDCSAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCisjZGVmaW5lIFRPU0hfTUFOVUZBQ1QJMHgwMDk4MDA5OAkvKiBUT1NISUJBIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCisjZGVmaW5lIE1UMl9NQU5VRkFDVAkweDAwMkMwMDJDCS8qIGFsdGVybmF0ZSBNSUNST04gbWFudWZhY3R1cmVyIElEKi8KKyNkZWZpbmUgRVhDRUxfTUFOVUZBQ1QJMHgwMDRBMDA0QQkvKiBFeGNlbCBTZW1pY29uZHVjdG9yICAgICAgICAgICAgICAgICAgKi8KKworCQkJCQkvKiBNaWNyb24gVGVjaG5vbG9naWVzIChJTlRFTCBjb21wYXQuKQkqLworI2RlZmluZSBNVF9JRF8yOEY0MDBfVAkweDQ0NzA0NDcwCS8qIDI4RjQwMEIzIElEICggNCBNLCB0b3AgYm9vdCBzZWN0b3IpCSovCisjZGVmaW5lIE1UX0lEXzI4RjQwMF9CCTB4NDQ3MTQ0NzEJLyogMjhGNDAwQjMgSUQgKCA0IE0sIGJvdHRvbSBib290IHNlY3QpICovCisKKyNkZWZpbmUgQU1EX0lEX0xWMDQwQgkweDRGCQkvKiAyOUxWMDQwQiBJRAkJCQkqLworCQkJCQkvKiA0IE1iaXQsIDUxMksgeCA4LAkJCSovCisJCQkJCS8qIDggNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCisKKyNkZWZpbmUgQU1EX0lEX0YwNDBCCTB4QTQJCS8qIDI5RjA0MEIgSUQJCQkJKi8KKwkJCQkJLyogNCBNYml0LCA1MTJLIHggOCwJCQkqLworCQkJCQkvKiA4IDY0SyB4IDggdW5pZm9ybSBzZWN0b3JzCQkqLworI2RlZmluZSBTVE1fSURfTTI5VzA0MEIgMHhFMwkJLyogTTI5VzA0MEIgSUQJCQkJKi8KKwkJCQkJLyogNCBNYml0LCA1MTJLIHggOCwJCQkqLworCQkJCQkvKiA4IDY0SyB4IDggdW5pZm9ybSBzZWN0b3JzCQkqLworI2RlZmluZSBBTURfSURfRjA4MEIJMHhENQkJLyogMjlGMDgwICBJRCAgKCAxIE0pCQkJKi8KKwkJCQkJLyogOCBNYml0LCA1MTJLIHggMTYsCQkJKi8KKwkJCQkJLyogOCA2NEsgeCAxNiB1bmlmb3JtIHNlY3RvcnMJCSovCisjZGVmaW5lIEFNRF9JRF9GMDE2RAkweEFECQkvKiAyOUYwMTYgIElEICAoIDIgTSB4IDgpCQkqLworI2RlZmluZSBBTURfSURfRjAzMkIJMHg0MQkJLyogMjlGMDMyICBJRCAgKCA0IE0geCA4KQkJKi8KKyNkZWZpbmUgQU1EX0lEX0xWMTE2RFQJMHhDNwkJLyogMjlMVjExNkRUICAgKCAyIE0geCA4LCB0b3AgYm9vdCBzZWN0KSAqLworI2RlZmluZSBBTURfSURfTFYxMTZEQiAgMHg0QwkJLyogMjlMVjExNkRCICAgKCAyIE0geCA4LCBib3R0b20gYm9vdCBzZWN0KSAqLworI2RlZmluZSBBTURfSURfTFYwMTZCCTB4YzgJCS8qIDI5TFYwMTYgSUQgICggMiBNIHggOCkJCSovCisKKyNkZWZpbmUgQU1EX0lEX1BMMTYwQ0IgIDB4MjI0NTIyNDUgICAgICAvKiAyOVBMMTYwQ0IgSUQgKDE2IE0sIGJvdHRvbSBib290IHNlY3QgKi8KKworI2RlZmluZSBBTURfSURfTFY0MDBUCTB4MjJCOTIyQjkJLyogMjlMVjQwMFQgSUQgKCA0IE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgQU1EX0lEX0xWNDAwQgkweDIyQkEyMkJBCS8qIDI5TFY0MDBCIElEICggNCBNLCBib3R0b20gYm9vdCBzZWN0KSAqLworCisjZGVmaW5lIEFNRF9JRF9MVjAzM0MJMHhBMwkJLyogMjlMVjAzM0MgSUQgKCA0IE0geCA4KQkJKi8KKyNkZWZpbmUgQU1EX0lEX0xWMDY1RAkweDkzCQkvKiAyOUxWMDY1RCBJRCAoIDggTSB4IDgpCQkqLworCisjZGVmaW5lIEFNRF9JRF9MVjgwMFQJMHgyMkRBMjJEQQkvKiAyOUxWODAwVCBJRCAoIDggTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLworI2RlZmluZSBBTURfSURfTFY4MDBCCTB4MjI1QjIyNUIJLyogMjlMVjgwMEIgSUQgKCA4IE0sIGJvdHRvbSBib290IHNlY3QpICovCisKKyNkZWZpbmUgQU1EX0lEX0xWMTYwVAkweDIyQzQyMkM0CS8qIDI5TFYxNjBUIElEICgxNiBNLCB0b3AgYm9vdCBzZWN0b3IpCSovCisjZGVmaW5lIEFNRF9JRF9MVjE2MEIJMHgyMjQ5MjI0OQkvKiAyOUxWMTYwQiBJRCAoMTYgTSwgYm90dG9tIGJvb3Qgc2VjdCkgKi8KKworI2RlZmluZSBBTURfSURfREwxNjNUCTB4MjIyODIyMjgJLyogMjlETDE2M1QgSUQgKDE2IE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgQU1EX0lEX0RMMTYzQgkweDIyMkIyMjJCCS8qIDI5REwxNjNCIElEICgxNiBNLCBib3R0b20gYm9vdCBzZWN0KQkqLworCisjZGVmaW5lIEFNRF9JRF9MVjMyMFQJMHgyMkY2MjJGNgkvKiAyOUxWMzIwVCBJRCAoMzIgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLworI2RlZmluZSBNWF9JRF9MVjMyMFQJMHgyMkE3MjJBNwkvKiAyOUxWMzIwVCBieSBNYWNyb25peCwgQU1EIGNvbXBhdGlibGUgKi8KKyNkZWZpbmUgQU1EX0lEX0xWMzIwQgkweDIyRjkyMkY5CS8qIDI5TFYzMjBCIElEICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KSAqLworI2RlZmluZSBNWF9JRF9MVjMyMEIJMHgyMkE4MjJBOAkvKiAyOUxWMzIwQiBieSBNYWNyb25peCwgQU1EIGNvbXBhdGlibGUgKi8KKworI2RlZmluZSBBTURfSURfREwzMjJUCTB4MjI1NTIyNTUJLyogMjlETDMyMlQgSUQgKDMyIE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgQU1EX0lEX0RMMzIyQgkweDIyNTYyMjU2CS8qIDI5REwzMjJCIElEICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KSAqLworI2RlZmluZSBBTURfSURfREwzMjNUCTB4MjI1MDIyNTAJLyogMjlETDMyM1QgSUQgKDMyIE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgQU1EX0lEX0RMMzIzQgkweDIyNTMyMjUzCS8qIDI5REwzMjNCIElEICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KSAqLworI2RlZmluZSBBTURfSURfREwzMjRUCTB4MjI1QzIyNUMJLyogMjlETDMyNFQgSUQgKDMyIE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgQU1EX0lEX0RMMzI0QgkweDIyNUYyMjVGCS8qIDI5REwzMjRCIElEICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KSAqLworCisjZGVmaW5lIEFNRF9JRF9ETDY0MAkweDIyN0UyMjdFCS8qIDI5REw2NDBEIElEICg2NCBNLCBkdWFsIGJvb3Qgc2VjdG9ycykqLworI2RlZmluZSBBTURfSURfTUlSUk9SCTB4MjI3RTIyN0UJLyogMXN0IElEIHdvcmQgZm9yIE1pcnJvckJpdCBmYW1pbHkgKi8KKyNkZWZpbmUgQU1EX0lEX0RMNjQwR18yCTB4MjIwMjIyMDIJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlETDY0MEcgIGF0IDB4MzggKi8KKyNkZWZpbmUgQU1EX0lEX0RMNjQwR18zCTB4MjIwMTIyMDEJLyogM3JkIElEIHdvcmQgZm9yIEFNMjlETDY0MEcgIGF0IDB4M2MgKi8KKyNkZWZpbmUgQU1EX0lEX0xWNjQwVV8yCTB4MjIwQzIyMEMJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlMVjY0ME0gIGF0IDB4MzggKi8KKyNkZWZpbmUgQU1EX0lEX0xWNjQwVV8zCTB4MjIwMTIyMDEJLyogM3JkIElEIHdvcmQgZm9yIEFNMjlMVjY0ME0gIGF0IDB4M2MgKi8KKyNkZWZpbmUgQU1EX0lEX0xWNjQwTVRfMiAweDIyMTAyMjEwCS8qIDJuZCBJRCB3b3JkIGZvciBBTTI5TFY2NDBNVCBhdCAweDM4ICovCisjZGVmaW5lIEFNRF9JRF9MVjY0ME1UXzMgMHgyMjAxMjIwMQkvKiAzcmQgSUQgd29yZCBmb3IgQU0yOUxWNjQwTVQgYXQgMHgzYyAqLworI2RlZmluZSBBTURfSURfTFY2NDBNQl8yIDB4MjIxMDIyMTAJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlMVjY0ME1CIGF0IDB4MzggKi8KKyNkZWZpbmUgQU1EX0lEX0xWNjQwTUJfMyAweDIyMDAyMjAwCS8qIDNyZCBJRCB3b3JkIGZvciBBTTI5TFY2NDBNQiBhdCAweDNjICovCisjZGVmaW5lIEFNRF9JRF9MVjEyOFVfMiAweDIyMTIyMjEyCS8qIDJuZCBJRCB3b3JkIGZvciBBTTI5TFYxMjhNICBhdCAweDM4ICovCisjZGVmaW5lIEFNRF9JRF9MVjEyOFVfMyAweDIyMDAyMjAwCS8qIDNyZCBJRCB3b3JkIGZvciBBTTI5TFYxMjhNICBhdCAweDNjICovCisjZGVmaW5lIEFNRF9JRF9MVjI1NlVfMiAweDIyMTIyMjEyCS8qIDJuZCBJRCB3b3JkIGZvciBBTTI5TFYyNTZNICBhdCAweDM4ICovCisjZGVmaW5lIEFNRF9JRF9MVjI1NlVfMyAweDIyMDEyMjAxCS8qIDNyZCBJRCB3b3JkIGZvciBBTTI5TFYyNTZNICBhdCAweDNjICovCisjZGVmaW5lIEFNRF9JRF9HTDA2NE1fMiAweDIyMTMyMjEzCS8qIDJuZCBJRCB3b3JkIGZvciBTMjlHTDA2NE0tUjYgKi8KKyNkZWZpbmUgQU1EX0lEX0dMMDY0TV8zIDB4MjIwMTIyMDEJLyogM3JkIElEIHdvcmQgZm9yIFMyOUdMMDY0TS1SNiAqLworCisjZGVmaW5lIEFNRF9JRF9MVjMyMEJfMgkweDIyMUEyMjFBCS8qIDJkIElEIHdvcmQgZm9yIEFNMjlMVjMyME1CIGF0IDB4MzggKi8KKyNkZWZpbmUgQU1EX0lEX0xWMzIwQl8zIDB4MjIwMDIyMDAJLyogM2QgSUQgd29yZCBmb3IgQU0yOUxWMzIwTUIgYXQgMHgzYyAqLworCisjZGVmaW5lIEFNRF9JRF9MVjY0MFUJMHgyMkQ3MjJENwkvKiAyOUxWNjQwVSBJRCAoNjQgTSwgdW5pZm9ybSBzZWN0b3JzKQkqLworCisjZGVmaW5lIEFUTV9JRF9CVjE2MTQJMHgwMDAwMDBDMAkvKiA0OUJWMTYxNCAgSUQgKi8KKyNkZWZpbmUgQVRNX0lEX0JWMTYxNEEJMHgwMDAwMDBDOAkvKiA0OUJWMTYxNEEgSUQgKi8KKyNkZWZpbmUgQVRNX0lEX0JWNjQxNgkweDAwMDAwMEQ2CS8qIDQ5QlY2NDE2ICBJRCAqLworCisjZGVmaW5lIEZVSklfSURfMjlGODAwQkEgIDB4MjI1ODIyNTgJLyogTUJNMjlGODAwQkEgSUQgICg4TSkgKi8KKyNkZWZpbmUgRlVKSV9JRF8yOUY4MDBUQSAgMHgyMkQ2MjJENgkvKiBNQk0yOUY4MDBUQSBJRCAgKDhNKSAqLworI2RlZmluZSBGVUpJX0lEXzI5TFY2NTBVRSAweDIyZDcyMmQ3CS8qIE1CTTI5TFY2NTBVRS82NTFVRSBJRCAoOE0gPSAxMjggeCAzMmtXb3JkKSAqLworCisjZGVmaW5lIFNTVF9JRF94RjIwMEEJMHgyNzg5Mjc4OQkvKiAzOXhGMjAwQSBJRCAoIDJNID0gMTI4SyB4IDE2ICkJKi8KKyNkZWZpbmUgU1NUX0lEX3hGNDAwQQkweDI3ODAyNzgwCS8qIDM5eEY0MDBBIElEICggNE0gPSAyNTZLIHggMTYgKQkqLworI2RlZmluZSBTU1RfSURfeEY4MDBBCTB4Mjc4MTI3ODEJLyogMzl4RjgwMEEgSUQgKCA4TSA9IDUxMksgeCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjE2MEEJMHgyNzgyMjc4MgkvKiAzOXhGODAwQSBJRCAoMTZNID0JMU0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjE2MDEJMHgyMzRCMjM0QgkvKiAzOXhGMTYwMSBJRCAoMTZNID0JMU0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjE2MDIJMHgyMzRBMjM0QQkvKiAzOXhGMTYwMiBJRCAoMTZNID0JMU0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjMyMDEJMHgyMzVCMjM1QgkvKiAzOXhGMzIwMSBJRCAoMzJNID0JMk0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjMyMDIJMHgyMzVBMjM1QQkvKiAzOXhGMzIwMiBJRCAoMzJNID0JMk0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjY0MDEJMHgyMzZCMjM2QgkvKiAzOXhGNjQwMSBJRCAoNjRNID0JNE0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjY0MDIJMHgyMzZBMjM2QQkvKiAzOXhGNjQwMiBJRCAoNjRNID0JNE0geCAxNiApCSovCisjZGVmaW5lIFNTVF9JRF94RjA0MAkweEJGRDdCRkQ3CS8qIDM5eEYwNDAgSUQgKDUxMktCID0gNE1iaXQgeCA4KQkqLworCisjZGVmaW5lIFNUTV9JRF9GMDQwQgkweEUyCQkvKiBNMjlGMDQwQiBJRCAoIDRNID0gNTEySyB4IDgJKQkqLworCQkJCQkvKiA4IDY0SyB4IDggdW5pZm9ybSBzZWN0b3JzCQkqLworCisjZGVmaW5lIFNUTV9JRF94ODAwQUIJMHgwMDVCMDA1QgkvKiBNMjlXODAwQUIgSUQgKDhNID0gNTEySyB4IDE2ICkJKi8KKyNkZWZpbmUgU1RNX0lEXzI5VzMyMERUIDB4MjJDQTIyQ0EJLyogTTI5VzMyMERUIElEICgzMiBNLCB0b3AgYm9vdCBzZWN0b3IpICovCisjZGVmaW5lIFNUTV9JRF8yOVczMjBEQiAweDIyQ0IyMkNCCS8qIE0yOVczMjBEQiBJRCAoMzIgTSwgYm90dG9tIGJvb3Qgc2VjdCkJKi8KKyNkZWZpbmUgU1RNX0lEXzI5VzA0MEIJMHgwMEUzMDBFMwkvKiBNMjlXMDQwQiBJRCAoNE0gPSA1MTJLIHggOCkJKi8KKworI2RlZmluZSBJTlRFTF9JRF8yOEYwMTZTICAgIDB4NjZhMDY2YTAJLyogMjhGMDE2U1tWU10gSUQgKDE2TSA9IDUxMmsgeCAxNikJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGODAwQjNUICAweDg4OTI4ODkyCS8qICA4TSA9IDUxMksgeCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGODAwQjNCICAweDg4OTM4ODkzCS8qICA4TSA9IDUxMksgeCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwQjNUICAweDg4OTA4ODkwCS8qICAxNk0gPSAxTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBCM0IgIDB4ODg5MTg4OTEJLyogIDE2TSA9IDFNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMEIzVCAgMHg4ODk2ODg5NgkvKiAgMzJNID0gMk0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMzIwQjNCICAweDg4OTc4ODk3CS8qICAzMk0gPSAyTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBCM1QgIDB4ODg5ODg4OTgJLyogIDY0TSA9IDRNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjY0MEIzQiAgMHg4ODk5ODg5OQkvKiAgNjRNID0gNE0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwRjNCICAweDg4RjQ4OEY0CS8qICAxNk0gPSAxTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworCisjZGVmaW5lIElOVEVMX0lEXzI4RjgwMEMzVCAgMHg4OEMwODhDMAkvKiAgOE0gPSA1MTJLIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjgwMEMzQiAgMHg4OEMxODhDMQkvKiAgOE0gPSA1MTJLIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjE2MEMzVCAgMHg4OEMyODhDMgkvKiAgMTZNID0gMU0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwQzNCICAweDg4QzM4OEMzCS8qICAxNk0gPSAxTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBDM1QgIDB4ODhDNDg4QzQJLyogIDMyTSA9IDJNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMEMzQiAgMHg4OEM1ODhDNQkvKiAgMzJNID0gMk0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjQwQzNUICAweDg4Q0M4OENDCS8qICA2NE0gPSA0TSB4IDE2IHRvcCBib290IHNlY3RvcgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBDM0IgIDB4ODhDRDg4Q0QJLyogIDY0TSA9IDRNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCisKKyNkZWZpbmUgSU5URUxfSURfMjhGMTI4SjMgICAweDg5MTg4OTE4CS8qICAxNk0gPSA4TSB4IDE2IHggMTI4ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMEo1ICAgMHgwMDE0MDAxNAkvKiAgMzJNID0gMTI4SyB4ICAzMgkqLworI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBKNSAgIDB4MDAxNTAwMTUJLyogIDY0TSA9IDEyOEsgeCAgNjQJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMzIwSjNBICAweDAwMTYwMDE2CS8qICAzMk0gPSAxMjhLIHggIDMyCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjY0MEozQSAgMHgwMDE3MDAxNwkvKiAgNjRNID0gMTI4SyB4ICA2NAkqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZMMTggIDB4ODgxMDg4MTAJLyogIDMyTSA9IDEyOEsgeCAyNTUJKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTI4SjNBICAweDAwMTgwMDE4CS8qIDEyOE0gPSAxMjhLIHggMTI4CSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjI1NkwxOFQgMHg4ODBEODgwRAkvKiAyNTZNID0gMTI4SyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2TDE4QiAweDg4MTA4ODEwCS8qIDI1Nk0gPSAgMzJrIHggNCAgICsgMTI4SyB4IDI1NSAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZQMzBCIDB4ODkxQzg5MUMJLyogMjU2TSA9ICAzMmsgeCA0ICAgKyAxMjhLIHggMjU1ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjI1NlAzMFQgMHg4OTE5ODkxOQkvKiAyNTZNID0gIDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjY0SzMgICAgMHg4ODAxODgwMQkvKiAgNjRNID0gIDMySyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMTI4SzMgICAweDg4MDI4ODAyCS8qIDEyOE0gPSAgNjRLIHggMjU1ICsgMzJrIHggNCAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZLMyAgIDB4ODgwMzg4MDMJLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisKKyNkZWZpbmUgSU5URUxfSURfMjhGMTYwUzMgICAweDAwRDAwMEQwCS8qICAxNk0gPSA1MTJLIHggIDMyICg2NGtCIHggMzIpCSovCisjZGVmaW5lIElOVEVMX0lEXzI4RjMyMFMzICAgMHgwMEQ0MDBENAkvKiAgMzJNID0gNTEySyB4ICA2NCAoNjRrQiB4IDY0KQkqLworCisvKiBOb3RlIHRoYXQgdGhlIFNoYXJwIDI4RjAxNlNDIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgSW50ZWwgRTI4RjAxNlNDICovCisjZGVmaW5lIFNIQVJQX0lEXzI4RjAxNlNDTCAgMHhBQUFBQUFBQQkvKiBMSDI4RjAxNlNDVC1MOTUgMk14OCwgMzIgNjRrIGJsb2NrcwkqLworI2RlZmluZSBTSEFSUF9JRF8yOEYwMTZTQ1ogIDB4QTBBMEEwQTAJLyogTEgyOEYwMTZTQ1QtWjQgIDJNeDgsIDMyIDY0ayBibG9ja3MJKi8KKyNkZWZpbmUgU0hBUlBfSURfMjhGMDA4U0MgICAweEE2QTZBNkE2CS8qIExIMjhGMDA4U0NULUwxMiAxTXg4LCAxNiA2NGsgYmxvY2tzCSovCisJCQkJCS8qIExIMjhGMDA4U0NSLUw4NSAxTXg4LCAxNiA2NGsgYmxvY2tzCSovCisKKyNkZWZpbmUgVE9TSF9JRF9GVlQxNjAJMHhDMgkJLyogVEM1OEZWVDE2MCBJRCAoMTYgTSwgdG9wICkJCSovCisjZGVmaW5lIFRPU0hfSURfRlZCMTYwCTB4NDMJCS8qIFRDNThGVlQxNjAgSUQgKDE2IE0sIGJvdHRvbSApCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIEZMQVNIIGlkZW50aWZpY2F0aW9uIGNvZGVzCisgKgorICogQmUgY2FyZWZ1bCB3aGVuIGFkZGluZyBuZXcgdHlwZSEgT2RkIG51bWJlcnMgYXJlICJib3R0b20gYm9vdCBzZWN0b3IiIHR5cGVzIQorICovCisKKyNkZWZpbmUgRkxBU0hfQU0wNDAJMHgwMDAxCQkvKiBBTUQgQW0yOUYwNDBCLCBBbTI5TFYwNDBCCQkqLworCQkJCQkvKiBCcmlnaHQgTWljcm8gQk0yOUYwNDAJCSovCisJCQkJCS8qIEZ1aml0c3UgTUJNMjlGMDQwQQkJCSovCisJCQkJCS8qIFNUTSBNMjlXMDQwQgkJCQkqLworCQkJCQkvKiBTR1MgVGhvbXNvbiBNMjlGMDQwQgkJCSovCisJCQkJCS8qIDggNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCisjZGVmaW5lIEZMQVNIX0FNNDAwVAkweDAwMDIJCS8qIEFNRCBBTTI5TFY0MDAJCQkqLworI2RlZmluZSBGTEFTSF9BTTQwMEIJMHgwMDAzCisjZGVmaW5lIEZMQVNIX0FNODAwVAkweDAwMDQJCS8qIEFNRCBBTTI5TFY4MDAJCQkqLworI2RlZmluZSBGTEFTSF9BTTgwMEIJMHgwMDA1CisjZGVmaW5lIEZMQVNIX0FNMTE2RFQJMHgwMDI2CQkvKiBBTUQgQU0yOUxWMTE2RFQgKDJNeDhiaXQpICovCisjZGVmaW5lIEZMQVNIX0FNMTE2REIJMHgwMDI3CQkvKiBBTUQgQU0yOUxWMTE2REIgKDJNeDhiaXQpICovCisjZGVmaW5lIEZMQVNIX0FNMTYwVAkweDAwMDYJCS8qIEFNRCBBTTI5TFYxNjAJCQkqLworI2RlZmluZSBGTEFTSF9BTTE2MExWCTB4MDA0NgkJLyogQU1EMjlMVjE2MERCICgyTSA9IDJNeDhiaXQgKSAqLworI2RlZmluZSBGTEFTSF9BTTE2MEIJMHgwMDA3CisjZGVmaW5lIEZMQVNIX0FNMzIwVAkweDAwMDgJCS8qIEFNRCBBTTI5TFYzMjAJCQkqLworI2RlZmluZSBGTEFTSF9BTTMyMEIJMHgwMDA5CisKKyNkZWZpbmUgRkxBU0hfQU0wODAJMHgwMDBBCQkvKiBBTUQgQW0yOUYwODBCCQkJKi8KKwkJCQkJLyogMTYgNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCisKKyNkZWZpbmUgRkxBU0hfQU1ETDMyMlQJMHgwMDEwCQkvKiBBTUQgQU0yOURMMzIyCQkJKi8KKyNkZWZpbmUgRkxBU0hfQU1ETDMyMkIJMHgwMDExCisjZGVmaW5lIEZMQVNIX0FNREwzMjNUCTB4MDAxMgkJLyogQU1EIEFNMjlETDMyMwkJCSovCisjZGVmaW5lIEZMQVNIX0FNREwzMjNCCTB4MDAxMworI2RlZmluZSBGTEFTSF9BTURMMzI0VAkweDAwMTQJCS8qIEFNRCBBTTI5REwzMjQJCQkqLworI2RlZmluZSBGTEFTSF9BTURMMzI0QgkweDAwMTUKKworI2RlZmluZSBGTEFTSF9BTURMVjAzM0MJMHgwMDE4CisjZGVmaW5lIEZMQVNIX0FNRExWMDY1RAkweDAwMUEKKworI2RlZmluZSBGTEFTSF9BTURMNjQwCTB4MDAxNgkJLyogQU1EIEFNMjlETDY0MEQJCQkqLworI2RlZmluZSBGTEFTSF9BTUQwMTYJMHgwMDE4CQkvKiBBTUQgQU0yOUYwMTZECQkJKi8KKyNkZWZpbmUgRkxBU0hfQU1ETDY0ME1CCTB4MDAxOQkJLyogQU1EIEFNMjlMVjY0ME1CICg2NE0sIGJvdHRvbSBib290IHNlY3QpKi8KKyNkZWZpbmUgRkxBU0hfQU1ETDY0ME1UCTB4MDAxQQkJLyogQU1EIEFNMjlMVjY0ME1UICg2NE0sIHRvcCBib290IHNlY3QpICovCisKKyNkZWZpbmUgRkxBU0hfU1NUMjAwQQkweDAwNDAJCS8qIFNTVCAzOXhGMjAwQSBJRCAoICAyTSA9IDEyOEsgeCAxNiApCSovCisjZGVmaW5lIEZMQVNIX1NTVDQwMEEJMHgwMDQyCQkvKiBTU1QgMzl4RjQwMEEgSUQgKCAgNE0gPSAyNTZLIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9TU1Q4MDBBCTB4MDA0NAkJLyogU1NUIDM5eEY4MDBBIElEICggIDhNID0gNTEySyB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfU1NUMTYwQQkweDAwNDYJCS8qIFNTVCAzOXhGMTYwQSBJRCAoIDE2TSA9ICAgMU0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX1NTVDMyMAkweDAwNDgJCS8qIFNTVCAzOXhGMTYwQSBJRCAoIDE2TSA9ICAgMU0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX1NTVDY0MAkweDAwNEEJCS8qIFNTVCAzOXhGMTYwQSBJRCAoIDE2TSA9ICAgMU0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX1NTVDA0MAkweDAwMEUJCS8qIFNTVCAzOXhGMDQwIElEICg1MTJLQiA9IDRNYml0IHggOCApCSovCisKKyNkZWZpbmUgRkxBU0hfU1RNODAwQUIJMHgwMDUxCQkvKiBTVE0gTTI5V0Y4MDBBQiAgKCAgOE0gPSA1MTJLIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9TVE1XMzIwRFQgMHgwMDUyCQkvKiBTVE0gTTI5VzMyMERUICAgKDMyIE0sIHRvcCBib290IHNlY3RvcikJKi8KKyNkZWZpbmUgRkxBU0hfU1RNVzMyMERCIDB4MDA1MwkJLyogU1RNIE0yOVczMjBEQiAgICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KSovCisjZGVmaW5lIEZMQVNIX1NUTTMyMERCCTB4MDBDQgkJLyogU1RNIE0yOVczMjBEQiAoNE0gPSA2NEsgeCA2NCwgYm90dG9tKSovCisjZGVmaW5lIEZMQVNIX1NUTTgwMERUCTB4MDBENwkJLyogU1RNIE0yOVc4MDBEVCAoMU0gPSA2NEsgeCAxNiwgdG9wKQkqLworI2RlZmluZSBGTEFTSF9TVE04MDBEQgkweDAwNUIJCS8qIFNUTSBNMjlXODAwREIgKDFNID0gNjRLIHggMTYsIGJvdHRvbSkqLworCisjZGVmaW5lIEZMQVNIXzI4RjQwMF9UCTB4MDA2MgkJLyogTVQgIDI4RjQwMEIzIElEICggIDRNID0gMjU2SyB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfMjhGNDAwX0IJMHgwMDYzCQkvKiBNVCAgMjhGNDAwQjMgSUQgKCAgNE0gPSAyNTZLIHggMTYgKQkqLworCisjZGVmaW5lIEZMQVNIX0lOVEVMODAwVCAweDAwNzQJCS8qIElOVEVMIDI4RjgwMEIzVCAoICA4TSA9IDUxMksgeCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMODAwQiAweDAwNzUJCS8qIElOVEVMIDI4RjgwMEIzQiAoICA4TSA9IDUxMksgeCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMMTYwVCAweDAwNzYJCS8qIElOVEVMIDI4RjE2MEIzVCAoIDE2TSA9ICAxIE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMMTYwQiAweDAwNzcJCS8qIElOVEVMIDI4RjE2MEIzQiAoIDE2TSA9ICAxIE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMMzIwVCAweDAwNzgJCS8qIElOVEVMIDI4RjMyMEIzVCAoIDMyTSA9ICAyIE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMMzIwQiAweDAwNzkJCS8qIElOVEVMIDI4RjMyMEIzQiAoIDMyTSA9ICAyIE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMNjQwVCAweDAwN0EJCS8qIElOVEVMIDI4RjMyMEIzVCAoIDY0TSA9ICA0IE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0lOVEVMNjQwQiAweDAwN0IJCS8qIElOVEVMIDI4RjMyMEIzQiAoIDY0TSA9ICA0IE0geCAxNiApCSovCisKKyNkZWZpbmUgRkxBU0hfMjhGMDA4UzUJMHgwMDgwCQkvKiBJbnRlbCAyOEYwMDhTNSAgKCAgMU0gPSAgNjRLIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF8yOEYwMTZTVgkweDAwODEJCS8qIEludGVsIDI4RjAxNlNWICAoIDE2TSA9IDUxMmsgeCAzMiApCSovCisjZGVmaW5lIEZMQVNIXzI4RjgwMF9CCTB4MDA4MwkJLyogSW50ZWwgRTI4RjgwMEIgICggIDFNID0gPyApCQkqLworI2RlZmluZSBGTEFTSF9BTTI5RjgwMEIgMHgwMDg0CQkvKiBBTUQgQW0yOUY4MDBCQiAgKCAgMU0gPSA/ICkJCSovCisjZGVmaW5lIEZMQVNIXzI4RjMyMEo1CTB4MDA4NQkJLyogSW50ZWwgMjhGMzIwSjUgICggIDRNID0gMTI4SyB4IDMyICkJKi8KKyNkZWZpbmUgRkxBU0hfMjhGMTYwUzMJMHgwMDg2CQkvKiBJbnRlbCAyOEYxNjBTMyAgKCAxNk0gPSA1MTJLIHggMzIgKQkqLworI2RlZmluZSBGTEFTSF8yOEYzMjBTMwkweDAwODgJCS8qIEludGVsIDI4RjMyMFMzICAoIDMyTSA9IDUxMksgeCA2NCApCSovCisjZGVmaW5lIEZMQVNIX0FNNjQwVQkweDAwOTAJCS8qIEFNRCBBbTI5TFY2NDBVICAoIDY0TSA9IDRNIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9BTTAzM0MJMHgwMDkxCQkvKiBBTUQgQU0yOUxWMDMzICAgKCAzMk0gPSA0TSB4IDggKQkqLworI2RlZmluZSBGTEFTSF9MSDI4RjAxNlNDVCAweDAwOTIJLyogU2hhcnAgMjhGMDE2U0NUICggOCBNZWcgRmxhc2ggU0lNTSApICovCisjZGVmaW5lIEZMQVNIXzI4RjE2MEYzQiAweDAwOTMJCS8qIEludGVsIDI4RjE2MEYzQiAoIDE2TSA9IDFNIHggMTYgKQkqLworCisjZGVmaW5lIEZMQVNIXzI4RjY0MEo1CTB4MDA5OQkJLyogSU5URUwgMjhGNjQwSjUgICggNjRNID0gMTI4SyB4ICA2NCkJKi8KKworI2RlZmluZSBGTEFTSF8yOEY4MDBDM1QgMHgwMDlBCQkvKiBJbnRlbCAyOEY4MDBDM1QgKCAgOE0gPSA1MTJLIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF8yOEY4MDBDM0IgMHgwMDlCCQkvKiBJbnRlbCAyOEY4MDBDM0IgKCAgOE0gPSA1MTJLIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF8yOEYxNjBDM1QgMHgwMDlDCQkvKiBJbnRlbCAyOEYxNjBDM1QgKCAxNk0gPSAxTSB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfMjhGMTYwQzNCIDB4MDA5RAkJLyogSW50ZWwgMjhGMTYwQzNCICggMTZNID0gMU0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIXzI4RjMyMEMzVCAweDAwOUUJCS8qIEludGVsIDI4RjMyMEMzVCAoIDMyTSA9IDJNIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF8yOEYzMjBDM0IgMHgwMDlGCQkvKiBJbnRlbCAyOEYzMjBDM0IgKCAzMk0gPSAyTSB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfMjhGNjQwQzNUIDB4MDBBMAkJLyogSW50ZWwgMjhGNjQwQzNUICggNjRNID0gNE0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIXzI4RjY0MEMzQiAweDAwQTEJCS8qIEludGVsIDI4RjY0MEMzQiAoIDY0TSA9IDRNIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9BTUxWMzIwVQkweDAwQTIJCS8qIEFNRCAyOUxWMzIwTSAgICAoIDMyTSA9IDJNIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9BTUxWNjQwVQkweDAwQTQJCS8qIEFNRCAyOUxWNjQwTSAgICAoIDY0TSA9IDRNIHggMTYgKQkqLworI2RlZmluZSBGTEFTSF9BTUxWMTI4VQkweDAwQTYJCS8qIEFNRCAyOUxWMTI4TQkgICAoIDEyOE0gPSA4TSB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfQU1MVjMyMEIgIDB4MDBBNwkJLyogQU1EIDI5TFYzMjBNQiAgICggMzJNID0gMk0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0FNTFYzMjBUCTB4MDBBOAkJLyogQU1EIDI5TFYzMjBNVCAgICggMzJNID0gMk0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX0FNTFYyNTZVCTB4MDBBQQkJLyogQU1EIDI5TFYyNTZNCSAgICggMjU2TSA9IDE2TSB4IDE2ICkJKi8KKyNkZWZpbmUgRkxBU0hfTVhMVjMyMEIgIDB4MDBBQgkJLyogTVggIDI5TFYzMjBNQiAgICggMzJNID0gMk0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIX01YTFYzMjBUCTB4MDBBQwkJLyogTVggIDI5TFYzMjBNVCAgICggMzJNID0gMk0geCAxNiApCSovCisjZGVmaW5lIEZMQVNIXzI4RjI1NkwxOFQgMHgwMEIwCQkvKiBJbnRlbCAyOEYyNTZMMThUICggMzJNID0gMTI4SyB4IDI1NSArIDMyayB4IDQpICovCisjZGVmaW5lIEZMQVNIXzI4RjI1NkwxOEIgMHgwMEIxCQkvKiBJbnRlbCAyOEYyNTZMMThCICggMzJNID0gMzJrIHggNCArIDEyOEsgeCAyNTUpICAqLworI2RlZmluZSBGTEFTSF8yOEYyNTZQMzBCIDB4MDAxQwkJLyogSW50ZWwgMjhGMjU2UDMwQiAoIDMyTSA9IDMyayB4IDQgKyAxMjhLIHggMjU1KSAgKi8KKyNkZWZpbmUgRkxBU0hfMjhGMjU2UDMwVCAweDAwMTkJCS8qIEludGVsIDI4RjI1NlAzMFQgKCAxMjhLIHggMjU1ICsgMzJNID0gMzJrIHggNCArICovCisjZGVmaW5lIEZMQVNIX0FNREwxNjNUCTB4MDBCMgkJLyogQU1EIEFNMjlETDE2M1QgKDJNIHggMTYgKQkJCSovCisjZGVmaW5lIEZMQVNIX0FNREwxNjNCCTB4MDBCMworI2RlZmluZSBGTEFTSF8yOEY2NEszCTB4MDBCNAkJLyogSW50ZWwgMjhGNjRLMyAgICggIDY0TSkJCSovCisjZGVmaW5lIEZMQVNIXzI4RjEyOEszCTB4MDBCNgkJLyogSW50ZWwgMjhGMTI4SzMgICggMTI4TSA9IDhNIHggMTYgKSAgICovCisjZGVmaW5lIEZMQVNIXzI4RjI1NkszCTB4MDBCOAkJLyogSW50ZWwgMjhGMjU2SzMgICggMjU2TSA9IDE2TSB4IDE2ICkgICovCisKKyNkZWZpbmUgRkxBU0hfMjhGMzIwSjNBIDB4MDBDMAkJLyogSU5URUwgMjhGMzIwSjNBICggMzJNID0gMTI4SyB4ICAzMikJKi8KKyNkZWZpbmUgRkxBU0hfMjhGNjQwSjNBIDB4MDBDMgkJLyogSU5URUwgMjhGNjQwSjNBICggNjRNID0gMTI4SyB4ICA2NCkJKi8KKyNkZWZpbmUgRkxBU0hfMjhGMTI4SjNBIDB4MDBDNAkJLyogSU5URUwgMjhGMTI4SjNBICgxMjhNID0gMTI4SyB4IDEyOCkJKi8KKworI2RlZmluZSBGTEFTSF9GVUpMVjY1MAkweDAwRDAJCS8qIEZ1aml0c3UgTUJNIDI5TFY2NTBVRS82NTFVRQkJKi8KKyNkZWZpbmUgRkxBU0hfTVQyOFM0TTE2TEMgMHgwMEUxCS8qIE1pY3JvbiBNVDI4UzRNMTZMQyAJCQkqLworI2RlZmluZSBGTEFTSF9TMjlHTDA2NE0gMHgwMEYwCQkvKiBTcGFuc2lvbiBTMjlHTDA2NE0tUjYJCSovCisKKyNkZWZpbmUgRkxBU0hfVU5LTk9XTgkweEZGRkYJCS8qIHVua25vd24gZmxhc2ggdHlwZQkJCSovCisKKworLyogbWFudWZhY3R1cmVyIG9mZnNldHMKKyAqLworI2RlZmluZSBGTEFTSF9NQU5fQU1ECTB4MDAwMDAwMDAJLyogQU1ECQkJCQkqLworI2RlZmluZSBGTEFTSF9NQU5fRlVKCTB4MDAwMTAwMDAJLyogRnVqaXRzdQkJCQkqLworI2RlZmluZSBGTEFTSF9NQU5fQk0JMHgwMDAyMDAwMAkvKiBCcmlnaHQgTWljcm9lbGVjdHJvbmljcwkJKi8KKyNkZWZpbmUgRkxBU0hfTUFOX01YCTB4MDAwMzAwMDAJLyogTVhJQwkJCQkJKi8KKyNkZWZpbmUgRkxBU0hfTUFOX1NUTQkweDAwMDQwMDAwCisjZGVmaW5lIEZMQVNIX01BTl9UT1NICTB4MDAwNTAwMDAJLyogVG9zaGliYQkJCQkqLworI2RlZmluZSBGTEFTSF9NQU5fRVhDRUwgMHgwMDA2MDAwMCAgICAgIC8qIEV4Y2VsIFNlbWljb25kdWN0b3IgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTEFTSF9NQU5fU1NUCTB4MDAxMDAwMDAKKyNkZWZpbmUgRkxBU0hfTUFOX0lOVEVMIDB4MDAzMDAwMDAKKyNkZWZpbmUgRkxBU0hfTUFOX01UCTB4MDA0MDAwMDAKKyNkZWZpbmUgRkxBU0hfTUFOX1NIQVJQIDB4MDA1MDAwMDAKKworCisjZGVmaW5lIEZMQVNIX1RZUEVNQVNLCTB4MDAwMEZGRkYJLyogZXh0cmFjdCBGTEFTSCB0eXBlCWluZm9ybWF0aW9uCSovCisjZGVmaW5lIEZMQVNIX1ZFTkRNQVNLCTB4RkZGRjAwMDAJLyogZXh0cmFjdCBGTEFTSCB2ZW5kb3IgaW5mb3JtYXRpb24JKi8KKworI2RlZmluZSBGTEFTSF9BTURfQ09NUAkweDAwMEZGRkZGCS8qIFVwIHRvIHRoaXMgSUQsIEZMQVNIIGlzIGNvbXBhdGlibGUJKi8KKwkJCQkJLyogd2l0aCBBTUQsIEZ1aml0c3UgYW5kIFNTVAkJKi8KKwkJCQkJLyogKEpFREVDIHN0YW5kYXJkIGNvbW1hbmRzID8pCQkqLworCisjZGVmaW5lIEZMQVNIX0JUWVBFCTB4MDAwMQkJLyogbWFzayBmb3IgYm90dG9tIGJvb3Qgc2VjdG9yIHR5cGUJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGltZW91dCBjb25zdGFudHM6CisgKgorICogV2UgY2FuJ3QgZmluZCBhbnkgc3BlY2lmaWNhdGlvbnMgZm9yIG1heGltdW0gY2hpcCBlcmFzZSB0aW1lcywKKyAqIHNvIHRoZXNlIHZhbHVlcyBhcmUgZ3Vlc3RpbWF0ZXMuCisgKi8KKyNkZWZpbmUgRkxBU0hfRVJBU0VfVElNRU9VVAkxMjAwMDAJLyogdGltZW91dCBmb3IgZXJhc2luZyBpbiBtcwkJKi8KKyNkZWZpbmUgRkxBU0hfV1JJVEVfVElNRU9VVAk1MDAJLyogdGltZW91dCBmb3Igd3JpdGVzICBpbiBtcwkJKi8KKworI2VuZGlmIC8qICFDRkdfTk9fRkxBU0ggKi8KKworI2VuZGlmIC8qIF9GTEFTSF9IXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL21jYzIwMC5jIGIvYm9hcmQvbWNjMjAwL21jYzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMmUxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tY2MyMDAvbWNjMjAwLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIE1hcmsgSm9uYXMsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBtYXJrLmpvbmFzQG1vdG9yb2xhLmNvbS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjNXh4eC5oPgorI2luY2x1ZGUgPHBjaS5oPgorCisvLyMjI0NIRDogZXMgZ2lidCBlaWdlbnRsaWNoIGtlaW4gRERSIGJlaSB1bnMgLT4gd2VnIGRhbWl0ITsgZHRvLiBQQ0khCisjaWYgZGVmaW5lZChDT05GSUdfTVBDNTIwMF9ERFIpCisjaW5jbHVkZSAibXQ0NnYxNm0xNi03NS5oIgorI2Vsc2UKKy8vI2luY2x1ZGUgIm10NDhsYzE2bTE2YTItNzUuaCIKKyNpbmNsdWRlICJtdDQ4bGM4bTMyYjItNi03LmgiCisjZW5kaWYKKworLy8jIyNDSEQ6IHdlbm4gUkFNQk9PVCBnZWhlbiB3dWVyZGUsIC4uLi4KKyNpZm5kZWYgQ0ZHX1JBTUJPT1QKK3N0YXRpYyB2b2lkIHNkcmFtX3N0YXJ0IChpbnQgaGlfYWRkcikKK3sKKwlsb25nIGhpX2FkZHJfYml0ID0gaGlfYWRkciA/IDB4MDEwMDAwMDAgOiAwOworCisJLyogdW5sb2NrIG1vZGUgcmVnaXN0ZXIgKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX0NUUkwgPSBTRFJBTV9DT05UUk9MIHwgMHg4MDAwMDAwMCB8IGhpX2FkZHJfYml0OworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKwkvKiBwcmVjaGFyZ2UgYWxsIGJhbmtzICovCisJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DVFJMID0gU0RSQU1fQ09OVFJPTCB8IDB4ODAwMDAwMDIgfCBoaV9hZGRyX2JpdDsKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCisjaWYgU0RSQU1fRERSCisJLyogc2V0IG1vZGUgcmVnaXN0ZXI6IGV4dGVuZGVkIG1vZGUgKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX01PREUgPSBTRFJBTV9FTU9ERTsKKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCisJLyogc2V0IG1vZGUgcmVnaXN0ZXI6IHJlc2V0IERMTCAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fTU9ERSA9IFNEUkFNX01PREUgfCAweDA0MDAwMDAwOworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisjZW5kaWYKKworCS8qIHByZWNoYXJnZSBhbGwgYmFua3MgKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX0NUUkwgPSBTRFJBTV9DT05UUk9MIHwgMHg4MDAwMDAwMiB8IGhpX2FkZHJfYml0OworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKwkvKiBhdXRvIHJlZnJlc2ggKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX0NUUkwgPSBTRFJBTV9DT05UUk9MIHwgMHg4MDAwMDAwNCB8IGhpX2FkZHJfYml0OworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKwkvKiBzZXQgbW9kZSByZWdpc3RlciAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fTU9ERSA9IFNEUkFNX01PREU7CisJX19hc21fXyB2b2xhdGlsZSAoInN5bmMiKTsKKworCS8qIG5vcm1hbCBvcGVyYXRpb24gKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX0NUUkwgPSBTRFJBTV9DT05UUk9MIHwgaGlfYWRkcl9iaXQ7CisJX19hc21fXyB2b2xhdGlsZSAoInN5bmMiKTsKK30KKyNlbmRpZgorCisvKgorICogQVRURU5USU9OOiBBbHRob3VnaCBwYXJ0aWFsbHkgcmVmZXJlbmNlZCBpbml0ZHJhbSBkb2VzIE5PVCBtYWtlIHJlYWwgdXNlCisgKiAgICAgICAgICAgIHVzZSBvZiBDRkdfU0RSQU1fQkFTRS4gVGhlIGNvZGUgZG9lcyBub3Qgd29yayBpZiBDRkdfU0RSQU1fQkFTRQorICogICAgICAgICAgICBpcyBzb21ldGhpbmcgZWxzZSB0aGFuIDB4MDAwMDAwMDAuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01QQzUyMDApCitsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisJdWxvbmcgZHJhbXNpemUgPSAwOworCXVsb25nIGRyYW1zaXplMiA9IDA7CisjaWZuZGVmIENGR19SQU1CT09UCisJdWxvbmcgdGVzdDEsIHRlc3QyOworCisJLyogc2V0dXAgU0RSQU0gY2hpcCBzZWxlY3RzICovCisJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DUzBDRkcgPSAweDAwMDAwMDFlOy8qIDJHIGF0IDB4MCAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fQ1MxQ0ZHID0gMHg4MDAwMDAwMDsvKiBkaXNhYmxlZCAqLworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKwkvKiBzZXR1cCBjb25maWcgcmVnaXN0ZXJzICovCisJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DT05GSUcxID0gU0RSQU1fQ09ORklHMTsKKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX0NPTkZJRzIgPSBTRFJBTV9DT05GSUcyOworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKyNpZiBTRFJBTV9ERFIKKwkvKiBzZXQgdGFwIGRlbGF5ICovCisJKih2dV9sb25nICopTVBDNVhYWF9DRE1fUE9SQ0ZHID0gU0RSQU1fVEFQREVMQVk7CisJX19hc21fXyB2b2xhdGlsZSAoInN5bmMiKTsKKyNlbmRpZgorCisJLyogZmluZCBSQU0gc2l6ZSB1c2luZyBTRFJBTSBDUzAgb25seSAqLworCXNkcmFtX3N0YXJ0KDApOworCXRlc3QxID0gZ2V0X3JhbV9zaXplKChsb25nICopQ0ZHX1NEUkFNX0JBU0UsIDB4ODAwMDAwMDApOworCXNkcmFtX3N0YXJ0KDEpOworCXRlc3QyID0gZ2V0X3JhbV9zaXplKChsb25nICopQ0ZHX1NEUkFNX0JBU0UsIDB4ODAwMDAwMDApOworCWlmICh0ZXN0MSA+IHRlc3QyKSB7CisJCXNkcmFtX3N0YXJ0KDApOworCQlkcmFtc2l6ZSA9IHRlc3QxOworCX0gZWxzZSB7CisJCWRyYW1zaXplID0gdGVzdDI7CisJfQorCisJLyogbWVtb3J5IHNtYWxsZXIgdGhhbiAxTUIgaXMgaW1wb3NzaWJsZSAqLworCWlmIChkcmFtc2l6ZSA8ICgxIDw8IDIwKSkgeworCQlkcmFtc2l6ZSA9IDA7CisJfQorCisJLyogc2V0IFNEUkFNIENTMCBzaXplIGFjY29yZGluZyB0byB0aGUgYW1vdW50IG9mIFJBTSBmb3VuZCAqLworCWlmIChkcmFtc2l6ZSA+IDApIHsKKwkJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DUzBDRkcgPSAweDEzICsgX19idWlsdGluX2ZmcyhkcmFtc2l6ZSA+PiAyMCkgLSAxOworCX0gZWxzZSB7CisJCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fQ1MwQ0ZHID0gMDsgLyogZGlzYWJsZWQgKi8KKwl9CisKKwkvKiBsZXQgU0RSQU0gQ1MxIHN0YXJ0IHJpZ2h0IGFmdGVyIENTMCAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fQ1MxQ0ZHID0gZHJhbXNpemUgKyAweDAwMDAwMDFlOy8qIDJHICovCisKKwkvKiBmaW5kIFJBTSBzaXplIHVzaW5nIFNEUkFNIENTMSBvbmx5ICovCisJaWYgKCFkcmFtc2l6ZSkKKwkJc2RyYW1fc3RhcnQoMCk7CisJdGVzdDIgPSB0ZXN0MSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKShDRkdfU0RSQU1fQkFTRSArIGRyYW1zaXplKSwgMHg4MDAwMDAwMCk7CisJaWYgKCFkcmFtc2l6ZSkgeworCQlzZHJhbV9zdGFydCgxKTsKKwkJdGVzdDIgPSBnZXRfcmFtX3NpemUoKGxvbmcgKikoQ0ZHX1NEUkFNX0JBU0UgKyBkcmFtc2l6ZSksIDB4ODAwMDAwMDApOworCX0KKwlpZiAodGVzdDEgPiB0ZXN0MikgeworCQlzZHJhbV9zdGFydCgwKTsKKwkJZHJhbXNpemUyID0gdGVzdDE7CisJfSBlbHNlIHsKKwkJZHJhbXNpemUyID0gdGVzdDI7CisJfQorCisJLyogbWVtb3J5IHNtYWxsZXIgdGhhbiAxTUIgaXMgaW1wb3NzaWJsZSAqLworCWlmIChkcmFtc2l6ZTIgPCAoMSA8PCAyMCkpIHsKKwkJZHJhbXNpemUyID0gMDsKKwl9CisKKwkvKiBzZXQgU0RSQU0gQ1MxIHNpemUgYWNjb3JkaW5nIHRvIHRoZSBhbW91bnQgb2YgUkFNIGZvdW5kICovCisJaWYgKGRyYW1zaXplMiA+IDApIHsKKwkJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DUzFDRkcgPSBkcmFtc2l6ZQorCQkJfCAoMHgxMyArIF9fYnVpbHRpbl9mZnMoZHJhbXNpemUyID4+IDIwKSAtIDEpOworCX0gZWxzZSB7CisJCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fQ1MxQ0ZHID0gZHJhbXNpemU7IC8qIGRpc2FibGVkICovCisJfQorCisjZWxzZSAvKiBDRkdfUkFNQk9PVCAqLworCisJLyogcmV0cmlldmUgc2l6ZSBvZiBtZW1vcnkgY29ubmVjdGVkIHRvIFNEUkFNIENTMCAqLworCWRyYW1zaXplID0gKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DUzBDRkcgJiAweEZGOworCWlmIChkcmFtc2l6ZSA+PSAweDEzKSB7CisJCWRyYW1zaXplID0gKDEgPDwgKGRyYW1zaXplIC0gMHgxMykpIDw8IDIwOworCX0gZWxzZSB7CisJCWRyYW1zaXplID0gMDsKKwl9CisKKwkvKiByZXRyaWV2ZSBzaXplIG9mIG1lbW9yeSBjb25uZWN0ZWQgdG8gU0RSQU0gQ1MxICovCisJZHJhbXNpemUyID0gKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DUzFDRkcgJiAweEZGOworCWlmIChkcmFtc2l6ZTIgPj0gMHgxMykgeworCQlkcmFtc2l6ZTIgPSAoMSA8PCAoZHJhbXNpemUyIC0gMHgxMykpIDw8IDIwOworCX0gZWxzZSB7CisJCWRyYW1zaXplMiA9IDA7CisJfQorCisjZW5kaWYgLyogQ0ZHX1JBTUJPT1QgKi8KKworCXJldHVybiBkcmFtc2l6ZSArIGRyYW1zaXplMjsKK30KKworLy8jIyNDSEQ6IHNvd2FzIGdpYnQgZXMgYmVpIHVzbiBuaWNodCEKKyNlbGlmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCisKK2xvbmcgaW50IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKK3sKKwl1bG9uZyBkcmFtc2l6ZSA9IDA7CisjaWZuZGVmIENGR19SQU1CT09UCisJdWxvbmcgdGVzdDEsIHRlc3QyOworCisJLyogc2V0dXAgYW5kIGVuYWJsZSBTRFJBTSBjaGlwIHNlbGVjdHMgKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX1NUQVJUID0gMHgwMDAwMDAwMDsKKwkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX1NUT1AgPSAweDAwMDBmZmZmOy8qIDJHICovCisJKih2dV9sb25nICopTVBDNVhYWF9BRERFQ1IgfD0gKDEgPDwgMjIpOyAvKiBFbmFibGUgU0RSQU0gKi8KKwlfX2FzbV9fIHZvbGF0aWxlICgic3luYyIpOworCisJLyogc2V0dXAgY29uZmlnIHJlZ2lzdGVycyAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fQ09ORklHMSA9IFNEUkFNX0NPTkZJRzE7CisJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9DT05GSUcyID0gU0RSQU1fQ09ORklHMjsKKworCS8qIGFkZHJlc3Mgc2VsZWN0IHJlZ2lzdGVyICovCisJKih2dV9sb25nICopTVBDNVhYWF9TRFJBTV9YTEJTRUwgPSBTRFJBTV9BRERSU0VMOworCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisKKwkvKiBmaW5kIFJBTSBzaXplICovCisJc2RyYW1fc3RhcnQoMCk7CisJdGVzdDEgPSBnZXRfcmFtX3NpemUoKHVsb25nICopQ0ZHX1NEUkFNX0JBU0UsIDB4ODAwMDAwMDApOworCXNkcmFtX3N0YXJ0KDEpOworCXRlc3QyID0gZ2V0X3JhbV9zaXplKCh1bG9uZyAqKUNGR19TRFJBTV9CQVNFLCAweDgwMDAwMDAwKTsKKwlpZiAodGVzdDEgPiB0ZXN0MikgeworCQlzZHJhbV9zdGFydCgwKTsKKwkJZHJhbXNpemUgPSB0ZXN0MTsKKwl9IGVsc2UgeworCQlkcmFtc2l6ZSA9IHRlc3QyOworCX0KKworCS8qIHNldCBTRFJBTSBlbmQgYWRkcmVzcyBhY2NvcmRpbmcgdG8gc2l6ZSAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fU1RPUCA9ICgoZHJhbXNpemUgLSAxKSA+PiAxNSk7CisKKyNlbHNlIC8qIENGR19SQU1CT09UICovCisKKwkvKiBSZXRyaWV2ZSBhbW91bnQgb2YgU0RSQU0gYXZhaWxhYmxlICovCisJZHJhbXNpemUgPSAoKCoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fU1RPUCArIDEpIDw8IDE1KTsKKworI2VuZGlmIC8qIENGR19SQU1CT09UICovCisKKwlyZXR1cm4gZHJhbXNpemU7Cit9CisKKyNlbHNlCisjZXJyb3IgTmVpdGhlciBDT05GSUdfTVBDNTIwMCBvciBDT05GSUdfTUdUNTEwMCBkZWZpbmVkCisjZW5kaWYKKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisgcHV0cygiQm9hcmQ6IEJsdWV0ZWNobml4IERldk1QQzUyMDBMZWljYSBcbiIpOworLyoKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1MjAwKQorCXB1dHMgKCJCb2FyZDogTWljcm9TeXMgUE01MjAgXG4iKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCisJcHV0cyAoIkJvYXJkOiBNaWNyb1N5cyBQTTUxMCBcbiIpOworI2VuZGlmKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBmbGFzaF9wcmVpbml0KHZvaWQpCit7CisJLyoKKwkgKiBOb3csIHdoZW4gd2UgYXJlIGluIFJBTSwgZW5hYmxlIGZsYXNoIHdyaXRlCisJICogYWNjZXNzIGZvciBkZXRlY3Rpb24gcHJvY2Vzcy4KKwkgKiBOb3RlIHRoYXQgQ1NfQk9PVCBjYW5ub3QgYmUgY2xlYXJlZCB3aGVuCisJICogZXhlY3V0aW5nIGluIGZsYXNoLgorCSAqLworI2lmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCisJKih2dV9sb25nICopTVBDNVhYWF9BRERFQ1IgJj0gfigxIDw8IDI1KTsgLyogZGlzYWJsZSBDU19CT09UICovCisJKih2dV9sb25nICopTVBDNVhYWF9BRERFQ1IgfD0gKDEgPDwgMTYpOyAvKiBlbmFibGUgQ1MwICovCisjZW5kaWYKKwkqKHZ1X2xvbmcgKilNUEM1WFhYX0JPT1RDU19DRkcgJj0gfjB4MTsgLyogY2xlYXIgUk8gKi8KK30KKwordm9pZCBmbGFzaF9hZnRlcmluaXQodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCisJLyogYWRqdXN0IG1hcHBpbmcgKi8KKwkqKHZ1X2xvbmcgKilNUEM1WFhYX0NTMV9TVEFSVCA9CisJCQlTVEFSVF9SRUcoc3RhcnQpOworCSoodnVfbG9uZyAqKU1QQzVYWFhfQ1MxX1NUT1AgPQorCQkJU1RPUF9SRUcoc3RhcnQsIHNpemUpOworI2Vsc2UKKwkvKiBhZGp1c3QgbWFwcGluZyAqLworCSoodnVfbG9uZyAqKU1QQzVYWFhfQk9PVENTX1NUQVJUID0gKih2dV9sb25nICopTVBDNVhYWF9DUzBfU1RBUlQgPQorCQkJU1RBUlRfUkVHKHN0YXJ0KTsKKwkqKHZ1X2xvbmcgKilNUEM1WFhYX0JPT1RDU19TVE9QID0gKih2dV9sb25nICopTVBDNVhYWF9DUzBfU1RPUCA9CisJCQlTVE9QX1JFRyhzdGFydCwgc2l6ZSk7CisjZW5kaWYKK30KKworCitleHRlcm4gZmxhc2hfaW5mb190IGZsYXNoX2luZm9bXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgKi8KKworaW50IG1pc2NfaW5pdF9yICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCS8qIGFkanVzdCBmbGFzaCBzdGFydCAqLworCWdkLT5iZC0+YmlfZmxhc2hzdGFydCA9IGZsYXNoX2luZm9bMF0uc3RhcnRbMF07CisJcmV0dXJuICgwKTsKK30KKworI2lmZGVmCUNPTkZJR19QQ0kKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZTsKKworZXh0ZXJuIHZvaWQgcGNpX21wYzV4eHhfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKik7CisKK3ZvaWQgcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKwlwY2lfbXBjNXh4eF9pbml0KCZob3NlKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQgKENPTkZJR19JREVfUkVTRVQpCisKK3ZvaWQgaW5pdF9pZGVfcmVzZXQgKHZvaWQpCit7CisJZGVidWcgKCJpbml0X2lkZV9yZXNldFxuIik7CisKK30KKwordm9pZCBpZGVfc2V0X3Jlc2V0IChpbnQgaWRlcmVzZXQpCit7CisJZGVidWcgKCJpZGVfcmVzZXQoJWQpXG4iLCBpZGVyZXNldCk7CisKK30KKyNlbmRpZiAvKiBkZWZpbmVkIChDRkdfQ01EX0lERSkgJiYgZGVmaW5lZCAoQ09ORklHX0lERV9SRVNFVCkgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0RPQykKK2V4dGVybiB2b2lkIGRvY19wcm9iZSAodWxvbmcgcGh5c2Fkcik7Cit2b2lkIGRvY19pbml0ICh2b2lkKQoreworCWRvY19wcm9iZSAoQ0ZHX0RPQ19CQVNFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL210NDZ2MTZtMTYtNzUuaCBiL2JvYXJkL21jYzIwMC9tdDQ2djE2bTE2LTc1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1MGZhYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21jYzIwMC9tdDQ2djE2bTE2LTc1LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogTWFyayBKb25hcywgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIG1hcmsuam9uYXNAbW90b3JvbGEuY29tLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgU0RSQU1fRERSCTEJCS8qIGlzIEREUiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTVBDNTIwMCkKKy8qIFNldHRpbmdzIGZvciBYTEIgPSAxMzIgTUh6ICovCisjZGVmaW5lIFNEUkFNX01PREUJMHgwMThEMDAwMAorI2RlZmluZSBTRFJBTV9FTU9ERQkweDQwMDkwMDAwCisjZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg3MTRmMGYwMAorI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4NzM3MjI5MzAKKyNkZWZpbmUgU0RSQU1fQ09ORklHMgkweDQ3NzcwMDAwCisjZGVmaW5lIFNEUkFNX1RBUERFTEFZCTB4MTAwMDAwMDAKKworI2Vsc2UKKyNlcnJvciBDT05GSUdfTVBDNTIwMCBub3QgZGVmaW5lZAorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvbXQ0OGxjMTZtMTZhMi03NS5oIGIvYm9hcmQvbWNjMjAwL210NDhsYzE2bTE2YTItNzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmRmMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWNjMjAwL210NDhsYzE2bTE2YTItNzUuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBNYXJrIEpvbmFzLCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgbWFyay5qb25hc0Btb3Rvcm9sYS5jb20uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBTRFJBTV9ERFIJMAkJLyogaXMgU0RSICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1MjAwKQorLyogU2V0dGluZ3MgZm9yIFhMQiA9IDEzMiBNSHogKi8KKyNkZWZpbmUgU0RSQU1fTU9ERQkweDAwQ0QwMDAwCisjZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg1MDRGMDAwMAorI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4RDIzMjI4MDAKKyNkZWZpbmUgU0RSQU1fQ09ORklHMgkweDhBRDcwMDAwCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCisvKiBTZXR0aW5ncyBmb3IgWExCID0gNjYgTUh6ICovCisjZGVmaW5lIFNEUkFNX01PREUJMHgwMDhEMDAwMAorI2RlZmluZSBTRFJBTV9DT05UUk9MCTB4NTA0RjAwMDAKKyNkZWZpbmUgU0RSQU1fQ09ORklHMQkweEMyMjIyNjAwCisjZGVmaW5lIFNEUkFNX0NPTkZJRzIJMHg4OEI3MDAwNAorI2RlZmluZSBTRFJBTV9BRERSU0VMCTB4MDIwMDAwMDAKKworI2Vsc2UKKyNlcnJvciBOZWl0aGVyIENPTkZJR19NUEM1MjAwIG9yIENPTkZJR19NR1Q1MTAwIGRlZmluZWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL210NDhsYzhtMzJiMi02LTcuaCBiL2JvYXJkL21jYzIwMC9tdDQ4bGM4bTMyYjItNi03LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyYjJiMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21jYzIwMC9tdDQ4bGM4bTMyYjItNi03LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIGZvciB0aGUgTVQ0OExDOE0zMkIyIFNEUkFNIG9uIHRoZSBNUEM1MjAwIHBsYXRmb3JtCisgKi8KKworI2RlZmluZSBTRFJBTV9ERFIJMAkJLyogaXMgU0RSICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1MjAwKQorLyogU2V0dGluZ3MgZm9yIFhMQiA9IDEzMiBNSHogKi8KKy8vI2RlZmluZSBTRFJBTV9NT0RFCTB4MDBjYzAwMDAgLy8gQ0wtMyBCVVJTVC04IC0+IE1vZGUgUmVnaXN0ZXKXTUJBUiArIDB4MDEwMAorLy8jZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg1MDFmMDAwMCAvLyBDb250cm9sIFJlZ2lzdGVyl01CQVIgKyAweDAxMDQKKy8vI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4ZTIzMjkwMDAgLy8gRGVsYXlzIGJldHdlZW4gY29tbWFuZHMgLT4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxl01CQVIgKyAweDAxMDgKKy8vI2RlZmluZSBTRFJBTV9DT05GSUcyCTB4NDZlNzAwMDAgLy8gRGVsYXlzIGJldHdlZW4gY29tbWFuZHMgLT4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyl01CQVIgKyAweDAxMEMKKworLy9DaHJpc3RpYW4KKy8vI2RlZmluZSBTRFJBTV9NT0RFCTB4MDBjZDAwMDAgLy8gQ0wtMyBCVVJTVC04IC0+IE1vZGUgUmVnaXN0ZXKXTUJBUiArIDB4MDEwMAorLy8jZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg1MDFmMDAwMCAvLyBDb250cm9sIFJlZ2lzdGVyl01CQVIgKyAweDAxMDQKKy8vI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4ZDIzMjI5MDAgLy8gRGVsYXlzIGJldHdlZW4gY29tbWFuZHMgLT4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxl01CQVIgKyAweDAxMDgKKy8vI2RlZmluZSBTRFJBTV9DT05GSUcyCTB4OGFkNzAwMDAgLy8gRGVsYXlzIGJldHdlZW4gY29tbWFuZHMgLT4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyl01CQVIgKyAweDAxMEMKKworLy8jIyNDSEQ6IG9yZGVudGxpY2hlIERva3UgZGF6dSEgQ0FTPTIsIGV0Yy4KKy8vU1RlZmFuCisjZGVmaW5lIFNEUkFNX01PREUJMHgwMDhkMDAwMCAvLyBDTC0zIEJVUlNULTggLT4gTW9kZSBSZWdpc3RlcpdNQkFSICsgMHgwMTAwCisjZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg1MDRmMDAwMCAvLyBDb250cm9sIFJlZ2lzdGVyl01CQVIgKyAweDAxMDQKKyNkZWZpbmUgU0RSQU1fQ09ORklHMQkweGMyMjIyOTAwIC8vIERlbGF5cyBiZXR3ZWVuIGNvbW1hbmRzIC0+IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMZdNQkFSICsgMHgwMTA4CisjZGVmaW5lIFNEUkFNX0NPTkZJRzIJMHg4OGM3MDAwMCAvLyBEZWxheXMgYmV0d2VlbiBjb21tYW5kcyAtPiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDKXTUJBUiArIDB4MDEwQworCisKKyNlbHNlCisjZXJyb3IgQ09ORklHX01QQzUyMDAgbm90IGRlZmluZWQsIHBsZWFzZSBzZXQgcGFyYW1ldGVycyBmb3IgeW91ciBzZHJhbSBjb250cm9sbGVyIGluIG10NDhsYzhtMzJiMi5oCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21jYzIwMC91LWJvb3QubGRzIGIvYm9hcmQvbWNjMjAwL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkZWE2YgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21jYzIwMC91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBjcHUvbXBjNXh4eC9zdGFydC5vCSgudGV4dCkKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgICAgLiA9IEFMSUdOKDE2KTsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgICAqKC5yb2RhdGEuc3RyMS40KQorICAgICooLmVoX2ZyYW1lKQorICB9CisgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKKyAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQorICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CisKKyAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCisgIC4gPSAoLiArIDB4MEZGRikgJiAweEZGRkZGMDAwOworICBfZXJvdGV4dCA9IC47CisgIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKKyAgLnJlbG9jICAgOgorICB7CisgICAgKiguZ290KQorICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgKiguZ290MikKKyAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAqKC5maXh1cCkKKyAgfQorICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pID4+IDI7CisKKyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5kYXRhMSkKKyAgICAqKC5zZGF0YSkKKyAgICAqKC5zZGF0YTIpCisgICAgKiguZHluYW1pYykKKyAgICBDT05TVFJVQ1RPUlMKKyAgfQorICBfZWRhdGEgID0gIC47CisgIFBST1ZJREUgKGVkYXRhID0gLik7CisKKyAgLiA9IC47CisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKKyAgLiA9IC47CisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDQwOTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9mZWMuYyBiL2NwdS9tcGM1eHh4L2ZlYy5jCmluZGV4IDg2YzhjZTYuLjJlOGU1NDkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2ZlYy5jCisrKyBiL2NwdS9tcGM1eHh4L2ZlYy5jCkBAIC04ODAsOCArODgwLDkgQEAKIAlmZWMtPnJiZEJhc2UgPSAoRkVDX1JCRCAqKShGRUNfQkRfQkFTRSArIEZFQ19UQkRfTlVNICogc2l6ZW9mKEZFQ19UQkQpKTsKICNpZiBkZWZpbmVkKENPTkZJR19DQU5NQikgICB8fCBkZWZpbmVkKENPTkZJR19ITUkxMDAxKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfSUNFQ1VCRSkgfHwgZGVmaW5lZChDT05GSUdfSU5LQTRYMCkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX01DQzIwMCkgIHx8IGRlZmluZWQoQ09ORklHX08yRE5UKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfUE01MjApICAgfHwgZGVmaW5lZChDT05GSUdfVE9QNTIwMCkJfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1RRTTUyMDApIHx8IGRlZmluZWQoQ09ORklHX08yRE5UKQorICAgIGRlZmluZWQoQ09ORklHX1RRTTUyMDApCiAjIGlmbmRlZiBDT05GSUdfRkVDXzEwTUJJVAogCWZlYy0+eGN2X3R5cGUgPSBNSUkxMDA7CiAjIGVsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjFmZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisKKyNkZWZpbmUgQ09ORklHX01QQzUyMDAKKyNkZWZpbmUgQ09ORklHX01QQzV4eHgJCTEJLyogVGhpcyBpcyBhbiBNUEM1eHh4IENQVQkJKi8KKyNkZWZpbmUgQ09ORklHX01DQzIwMAkJMQkvKiAuLi4gb24gTUNDMjAwIGJvYXJkCQkJKi8KKworI2RlZmluZSBDRkdfTVBDNVhYWF9DTEtJTgkzMzAwMDAwMCAvKiAuLi4gcnVubmluZyBhdCAzM01IegkJKi8KKworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKworI2RlZmluZSBCT09URkxBR19DT0xECQkweDAxCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIIAkqLworI2RlZmluZSBCT09URkxBR19XQVJNCQkweDAyCS8qIFNvZnR3YXJlIHJlYm9vdAkgICAgIAkJKi8KKworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIE1QQzV4eHggQ1BVcyAJCQkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjICBkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlIAkqLworI2VuZGlmCisKKy8qCisgKiBTZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1BTQ19DT05TT0xFCTEJLyogY29uc29sZSBpcyBvbiBQU0MxCQkJKi8KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwLCAyMzA0MDAgfQorCisKKy8vIyMjQ0hEOiBNUEM1MTAwIGdpYnQgZXMgbmljaHQgLT4gd2VnIGRhbWl0IQorI2lmZGVmIENPTkZJR19NUEM1MjAwCS8qIE1QQzUxMDAgUENJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAqLworLyoKKyAqIFBDSSBNYXBwaW5nOgorICogMHg0MDAwMDAwMCAtIDB4NGZmZmZmZmYgLSBQQ0kgTWVtb3J5CisgKiAweDUwMDAwMDAwIC0gMHg1MGZmZmZmZiAtIFBDSSBJTyBTcGFjZQorICovCisvL1dlbm4gZ2VodCBQQ0kgcmF1cyEKKyNkZWZpbmUgQ09ORklHX1BDSQkJMQorI2RlZmluZSBDT05GSUdfUENJX1BOUAkJMQorI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwkxCisjdW5kZWYgQ09ORklHX1BDSV9TQ0FOX1NIT1cKKworI2RlZmluZSBDT05GSUdfUENJX01FTV9CVVMJMHg0MDAwMDAwMAorI2RlZmluZSBDT05GSUdfUENJX01FTV9QSFlTCUNPTkZJR19QQ0lfTUVNX0JVUworI2RlZmluZSBDT05GSUdfUENJX01FTV9TSVpFCTB4MTAwMDAwMDAKKworI2RlZmluZSBDT05GSUdfUENJX0lPX0JVUwkweDUwMDAwMDAwCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fUEhZUwlDT05GSUdfUENJX0lPX0JVUworI2RlZmluZSBDT05GSUdfUENJX0lPX1NJWkUJMHgwMTAwMDAwMAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorI2RlZmluZSBDT05GSUdfTUlJCQkxCisjZGVmaW5lIENPTkZJR19FRVBSTzEwMAkJMQorI2RlZmluZSBDRkdfUlhfRVRIX0JVRkZFUgk4ICAvKiB1c2UgOCByeCBidWZmZXIgb24gZWVwcm8xMDAgICovCisjdW5kZWYgIENPTkZJR19OUzgzODJYCisKKyNkZWZpbmUgQUREX1BDSV9DTUQgCQlDRkdfQ01EX1BDSQorCisjZWxzZQkvKiBNUEM1MTAwICovCisKKyNkZWZpbmUgQUREX1BDSV9DTUQJCTAgIC8qIG5vIENGR19DTURfUENJICovCisKKyNlbmRpZgorCisvKiBQYXJ0aXRpb25zICovCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisKKy8qIFVTQiAqLworI2lmIDEKKyNkZWZpbmUgQ09ORklHX1VTQl9PSENJCisjZGVmaW5lIEFERF9VU0JfQ01EICAgICAgICAgICAgIENGR19DTURfVVNCIHwgQ0ZHX0NNRF9GQVQKKyNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCisjZWxzZQorI2RlZmluZSBBRERfVVNCX0NNRCAgICAgICAgICAgICAwCisjZW5kaWYKKworLy8jIyNDSEQ6IEJPT1RST20gcmF1cyEKKyNpZiBkZWZpbmVkKENPTkZJR19CT09UX1JPTSkKKyNkZWZpbmUgQUREX0RPQ19DTUQgICAgICAgICAgICAgMAorI2Vsc2UKKyNkZWZpbmUgQUREX0RPQ19DTUQgICAgICAgICAgICAgQ0ZHX0NNRF9ET0MKKyNlbmRpZgorCisvKgorICogU3VwcG9ydGVkIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgICAoQ09ORklHX0NNRF9ERkwJfCBcCisJCQkJQUREX0RPQ19DTUQJfCBcCisJCQkJQUREX1BDSV9DTUQJfCBcCisJCQkJQUREX1VTQl9DTUQJfCBcCisJCQkJQ0ZHX0NNRF9CRURCVUcJfCBcCisJCQkJQ0ZHX0NNRF9EQVRFCXwgXAorCQkJCUNGR19DTURfREhDUAl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKKwkJCQlDRkdfQ01EX0ZBVAl8IFwKKwkJCQlDRkdfQ01EX0kyQwl8IFwKKwkJCQlDRkdfQ01EX0lERQl8IFwKKwkJCQlDRkdfQ01EX05GUwl8IFwKKwkJCQlDRkdfQ01EX1NOVFAJKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qCisgKiBBdXRvYm9vdGluZworICovCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMgKi8KKworI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiCVwKKwkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKKwkiZWNobyIKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJXAorCSJob3N0bmFtZT1sbXBjXDAiCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJXAorCSJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiCQkJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmIHBhbmljPTFcMCIJCQlcCisJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcDsiCQkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXA7IgkJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCisJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAorCSJyb290cGF0aD0vb3B0L2VsZGszMC9wcGNfODJ4eFwwIgkJCQlcCisJImJvb3RmaWxlPS90ZnRwYm9vdC9MTVBDL3VJbWFnZVwwIgkJCQlcCisJImJhdWRyYXRlPTExNTIwMFwwIgkJCQkJCVwKKwkic2VydmVyaXA9MTkyLjE2OC4wLjFcMCIJCQkJCVwKKwkiaXBhZGRyPTE5Mi4xNjguMC4yXDAiCQkJCQkJXAorCSJldGhhZGRyPTAwOjAyOjQ0OjdkOjczOjNiXDAiCQkJCQkJXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gZmxhc2hfc2VsZiIKKworI2lmIGRlZmluZWQoQ09ORklHX01QQzUyMDApCisvKgorICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgorICovCisjdW5kZWYgQ0ZHX0lQQlNQRUVEXzEzMyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNlbmRpZgorCisvLyMjI0NIRDogRUVQcm9tIGNvbmZpZyBSVEMgY29uZmlnIHNvbGx0ZSByYXVzLCBnaWJ0IGVzIG5jaWh0IGJlaSB1bnMgYXVmIEkyQyEKKy8qCisgKiBJMkMgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0ICovCisjZGVmaW5lIENGR19JMkNfTU9EVUxFCQkyCS8qIFNlbGVjdCBJMkMgbW9kdWxlICMxIG9yICMyICovCisKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJMTAwMDAwIC8qIDEwMCBrSHogKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorCisvKgorICogRUVQUk9NIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCQkweDU4CisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOCQkxCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTCTQKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TCTEwCisKKy8qCisgKiBSVEMgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19SVENfUENGODU2MworI2RlZmluZSBDRkdfSTJDX1JUQ19BRERSCQkweDUxCisKKy8vIyMjQ0hEOiBtZWluZXIgQW5zaWNodCBuYWNoIGF1Y2ggcmF1cyEKKy8qCisgKiBEaXNrLU9uLUNoaXAgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ0ZHX0RPQ19TSE9SVF9USU1FT1VUCisjZGVmaW5lIENGR19NQVhfRE9DX0RFVklDRQkxCS8qIE1heCBudW1iZXIgb2YgRE9DIGRldmljZXMJKi8KKworI2RlZmluZSBDRkdfRE9DX1NVUFBPUlRfMjAwMAorI2RlZmluZSBDRkdfRE9DX1NVUFBPUlRfTUlMTEVOTklVTQorI2RlZmluZSBDRkdfRE9DX0JBU0UJCTB4RTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0RPQ19TSVpFCQkweDAwMTAwMDAwCisKKy8vIyMjQ0hEOiBCT09UUk9tIHJhdXMhCisjaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCisvKgorICogRmxhc2ggY29uZmlndXJhdGlvbiAoOCwxNiBvciAzMiBNQikKKyAqIFRFWFQgYmFzZSBhbHdheXMgYXQgMHhGRkYwMDAwMAorICogRU5WX0FERFIgYWx3YXlzIGF0ICAweEZGRjQwMDAwCisgKiBGTEFTSF9CQVNFIGF0IDB4RkMwMDAwMDAgZm9yIDMyIE1CCisgKiAgICAgICAgICAgICAgIDB4RkQwMDAwMDAgZm9yIDE2IE1CCisgKiAgICAgICAgICAgICAgIDB4RkQ4MDAwMDAgZm9yICA4IE1CCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmMwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQ0ZHX0JPT1RST01fQkFTRQkweEZGRjAwMDAwCisjZGVmaW5lIENGR19CT09UUk9NX1NJWkUJMHgwMDA4MDAwMAorI2RlZmluZSBDRkdfRU5WX0FERFIJCSgweEZERjAwMDAwICsgMHg0MDAwMCkKKyNlbHNlCisvKgorICogRmxhc2ggY29uZmlndXJhdGlvbiAoOCwxNiBvciAzMiBNQikKKyAqIFRFWFQgYmFzZSBhbHdheXMgYXQgMHhGRkYwMDAwMAorICogRU5WX0FERFIgYWx3YXlzIGF0ICAweEZGRjQwMDAwCisgKiBGTEFTSF9CQVNFIGF0IDB4RkUwMDAwMDAgZm9yIDMyIE1CCisgKiAgICAgICAgICAgICAgIDB4RkYwMDAwMDAgZm9yIDE2IE1CCisgKiAgICAgICAgICAgICAgIDB4RkY4MDAwMDAgZm9yICA4IE1CCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmUwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoMHhGRkYwMDAwMCArIDB4NDAwMDApCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW0gb2YgbWVtb3J5IGJhbmtzICAgICAgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW0gb2Ygc2VjdHMgb24gb25lIGNoaXAgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkyNDAwMDAJLyogRmxhc2ggRXJhc2UgVGltZW91dCAoaW4gbXMpICAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogRmxhc2ggV3JpdGUgVGltZW91dCAoaW4gbXMpICAqLworI2RlZmluZSBDRkdfRkxBU0hfTE9DS19UT1VUCTUJLyogVGltZW91dCBmb3IgRmxhc2ggU2V0IExvY2sgQml0IChpbiBtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VOTE9DS19UT1VUCTEwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIENsZWFyIExvY2sgQml0cyAoaW4gbXMpICovCisjZGVmaW5lIENGR19GTEFTSF9QUk9URUNUSU9OCQkvKiAiUmVhbCIgKGhhcmR3YXJlKSBzZWN0b3JzIHByb3RlY3Rpb24gKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIX1NFQ1RfU0laRQkweDAwMDQwMDAwIC8qIDI1NiBLQiBzZWN0b3JzICh4MikgKi8KKworI3VuZGVmIENPTkZJR19GTEFTSF8xNkJJVAkvKiBGbGFzaCBpcyAzMi1iaXQgKi8KKworCisvKgorICogRW52aXJvbm1lbnQgc2V0dGluZ3MKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDEwMDAwCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisvKgorICogTWVtb3J5IG1hcAorICovCisjZGVmaW5lIENGR19NQkFSCQkweGYwMDAwMDAwCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19ERUZBVUxUX01CQVIJMHg4MDAwMDAwMAorCisvKiBVc2UgU1JBTSB1bnRpbCBSQU0gd2lsbCBiZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJTVBDNVhYWF9TUkFNCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJTVBDNVhYWF9TUkFNX1NJWkUJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBEUFJBTSAqLworCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICBURVhUX0JBU0UKKyNpZiAoQ0ZHX01PTklUT1JfQkFTRSA8IENGR19GTEFTSF9CQVNFKQorIyAgIGRlZmluZSBDRkdfUkFNQk9PVAkJMQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qCisgKiBFdGhlcm5ldCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX01QQzV4eHhfRkVDCTEKKy8qCisgKiBEZWZpbmUgQ09ORklHX0ZFQ18xME1CSVQgdG8gZm9yY2UgRkVDIGF0IDEwTWIKKyAqLworLyogI2RlZmluZSBDT05GSUdfRkVDXzEwTUJJVCAxICovCisjZGVmaW5lIENPTkZJR19QSFlfQUREUgkJMHgwMAorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9uCisgKi8KKy8vIyMjQ0hEOiBNU0IgPSAxIC0+IDY0TUI6IGZ1bmt0aW9uaWVydCBuaWNodDogRVJSQVRBIC0gQlVHPworLy8jIyNDSEQ6IDB4MTAwMDAwMDQgPSAzMk1CIFNEUkFNCisvLyMjI0NIRDogMHg5MDAwMDAwNCA9IDY0TUIgU0RSQU0KKyNkZWZpbmUgQ0ZHX0dQU19QT1JUX0NPTkZJRwkweDEwMDAwMDA0CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJICAgICovCisjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJCTEwMjQJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisjZWxzZQorI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAwZjAwMDAwCS8qIDEgLi4uIDE1IE1CIGluIERSQU0JKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLworCisvKgorICogVmFyaW91cyBsb3ctbGV2ZWwgc2V0dGluZ3MKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX01QQzUyMDApCisjZGVmaW5lIENGR19ISUQwX0lOSVQJCUhJRDBfSUNFIHwgSElEMF9JQ0ZJCisjZGVmaW5lIENGR19ISUQwX0ZJTkFMCQlISUQwX0lDRQorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0hJRDBfSU5JVAkJMAorI2RlZmluZSBDRkdfSElEMF9GSU5BTAkJMAorI2VuZGlmCisKKy8vIyMjQ0hEOiBoaWVyIHNvbGx0ZSBkYXMgQk9PVF9ST00gcmF1cyEKKyNpZiBkZWZpbmVkKENPTkZJR19CT09UX1JPTSkKKyNkZWZpbmUgQ0ZHX0JPT1RDU19TVEFSVAlDRkdfQk9PVFJPTV9CQVNFCisjZGVmaW5lIENGR19CT09UQ1NfU0laRQkJQ0ZHX0JPT1RST01fU0laRQorI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0NzgwMAorI2RlZmluZSBDRkdfQ1MwX1NUQVJUCQlDRkdfQk9PVFJPTV9CQVNFCisjZGVmaW5lIENGR19DUzBfU0laRQkJQ0ZHX0JPT1RST01fU0laRQorI2RlZmluZSBDRkdfQ1MxX1NUQVJUCQlDRkdfRkxBU0hfQkFTRQorI2RlZmluZSBDRkdfQ1MxX1NJWkUJCUNGR19GTEFTSF9TSVpFCisjZGVmaW5lIENGR19DUzFfQ0ZHCQkweDAwMDRmYjAwCisjZWxzZQorI2RlZmluZSBDRkdfQk9PVENTX1NUQVJUCUNGR19GTEFTSF9CQVNFCisjZGVmaW5lIENGR19CT09UQ1NfU0laRQkJQ0ZHX0ZMQVNIX1NJWkUKKyNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwNGZiMDAKKyNkZWZpbmUgQ0ZHX0NTMF9TVEFSVAkJQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUgQ0ZHX0NTMF9TSVpFCQlDRkdfRkxBU0hfU0laRQorI2RlZmluZSBDRkdfQ1MxX1NUQVJUCQlDRkdfRE9DX0JBU0UKKyNkZWZpbmUgQ0ZHX0NTMV9TSVpFCQlDRkdfRE9DX1NJWkUKKyNkZWZpbmUgQ0ZHX0NTMV9DRkcJCTB4MDAwNDc4MDAKKyNlbmRpZgorCisjZGVmaW5lIENGR19DU19CVVJTVAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfQ1NfREVBRENZQ0xFCTB4MzMzMzMzMzMKKworI2RlZmluZSBDRkdfUkVTRVRfQUREUkVTUwkweGZmMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVTQiBzdHVmZgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIENPTkZJR19VU0JfQ0xPQ0sJMHgwMDAxQkJCQgorI2RlZmluZSBDT05GSUdfVVNCX0NPTkZJRwkweDAwMDA1MDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElERS9BVEEgc3R1ZmYgU3VwcG9ydHMgSURFIGhhcmRkaXNrCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLy8jIyNDSEQ6IGVpZ2VudGxpY2ggZGFzIGdhbnplIElERSB6ZXVncyByYXVzIChJREUgd2lyZCBkZXJ6ZWl0IG5jaWh0IG1laHIgZ2VzY2FubnQhKQorI3VuZGVmICBDT05GSUdfSURFXzh4eF9QQ0NBUkQJCS8qIFVzZSBJREUgd2l0aCBQQyBDYXJkCUFkYXB0ZXIJKi8KKworI3VuZGVmCUNPTkZJR19JREVfOHh4X0RJUkVDVAkJLyogRGlyZWN0IElERSAgICBub3Qgc3VwcG9ydGVkCSovCisjdW5kZWYJQ09ORklHX0lERV9MRUQJCQkvKiBMRUQgICBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KKworI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgc3VwcG9ydGVkCSovCisjZGVmaW5lIENPTkZJR19JREVfUFJFSU5JVAorI3VuZGVmCUNPTkZJR19JREVfUFJFSU5JVAorCisjZGVmaW5lIENGR19JREVfTUFYQlVTCQkwCS8qIG1heC4gMSBJREUgYnVzCQkqLworI2RlZmluZSBDRkdfSURFX01BWERFVklDRQkyCS8qIG1heC4gMiBkcml2ZSBwZXIgSURFIGJ1cwkqLworCisjZGVmaW5lIENGR19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCisKKyNkZWZpbmUgQ0ZHX0FUQV9CQVNFX0FERFIJTVBDNVhYWF9BVEEKKworLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJCSovCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJKDB4MDA2MCkKKworLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCShDRkdfQVRBX0RBVEFfT0ZGU0VUKQorCisvKiBPZmZzZXQgZm9yIGFsdGVybmF0ZSByZWdpc3RlcnMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCSgweDAwNUMpCisKKy8qIEludGVydmFsIGJldHdlZW4gcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0FUQV9TVFJJREUgICAgICAgICAgNAorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwo=