ZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDg0MzFiM2UuLjE3NzJhZTMgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTU0LDYgKzE1NCw3IEBACiBMSVNUXzc0eHg9IglcCiAJREI2NDM2MAkJREI2NDQ2MAkJRVZCNjQyNjAJUDNHNAkJXAogCXAzbTc0NDgJCVBDSVBQQzIJCVBDSVBQQzYJCVpVTUEJCVwKKwltcGM3NDQ4aHBjMgogIgogCiBMSVNUXzd4eD0iCVwKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZmVjMTE0Zi4uODZiMTAwNiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE3NzMsNiArMTc3Myw5IEBACiBFVkI2NDI2MF83NTBDWF9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpIEVWQjY0MjYwIHBwYyA3NHh4Xzd4eCBldmI2NDI2MAogCittcGM3NDQ4aHBjMl9jb25maWc6ICB1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBtcGM3NDQ4aHBjMgorCiBQM0c0X2NvbmZpZzogdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggZXZiNjQyNjAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDE1NDI4NjQuLjBiYTlmNWIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIzODEsMTcgKzIzODEsMTcgQEAKIAljc2IyNzJfY29uZmlnCQlsd21vbl9jb25maWcJCXNiYzgyNjBfY29uZmlnCiAJQ1U4MjRfY29uZmlnCQlNQlg4NjBUX2NvbmZpZwkJc2JjODU2MF8zM19jb25maWcKIAlEVUVUX0FEU19jb25maWcJCU1CWF9jb25maWcJCXNiYzg1NjBfNjZfY29uZmlnCi0JRUJPTllfY29uZmlnCQlNUEM4MjYwQURTX2NvbmZpZwlTTTg1MF9jb25maWcKLQlFTFBUODYwX2NvbmZpZwkJTVBDODU0MEFEU19jb25maWcJU1BEODIzVFNfY29uZmlnCi0JRVNURUVNMTkyRV9jb25maWcJTVBDODU0MEVWQUxfY29uZmlnCXN0eGdwM19jb25maWcKLQlFVFgwOTRfY29uZmlnCQlNUEM4NTYwQURTX2NvbmZpZwlTWE5JODU1VF9jb25maWcKLQlGQURTODIzX2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJVFFNODIzTF9jb25maWcKLQlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTUxMGlubl9jb25maWcJVFFNODUwTF9jb25maWcKLQlGQURTODYwVF9jb25maWcJCW9tYXAxNjEwaDJfY29uZmlnCVRRTTg1NUxfY29uZmlnCi0JRlBTODUwTF9jb25maWcJCW9tYXAxNjEwaW5uX2NvbmZpZwlUUU04NjBMX2NvbmZpZwotCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwl3YWxudXRfY29uZmlnCi0JCQkJb21hcDI0MjBoNF9jb25maWcJWXVrb244MjIwX2NvbmZpZwotCQkJCQkJCVpQQzE5MDBfY29uZmlnCisJRUJPTllfY29uZmlnCQltcGM3NDQ4aHBjMl9jb25maWcJU004NTBfY29uZmlnCisJRUxQVDg2MF9jb25maWcJCU1QQzgyNjBBRFNfY29uZmlnCVNQRDgyM1RTX2NvbmZpZworCUVTVEVFTTE5MkVfY29uZmlnCU1QQzg1NDBBRFNfY29uZmlnCXN0eGdwM19jb25maWcKKwlFVFgwOTRfY29uZmlnCQlNUEM4NTQwRVZBTF9jb25maWcJU1hOSTg1NVRfY29uZmlnCisJRkFEUzgyM19jb25maWcJCU5NUEM4NTYwQURTX2NvbmZpZwlUUU04MjNMX2NvbmZpZworCUZBRFM4NTBTQVJfY29uZmlnCU5FVFZJQV9jb25maWcJCVRRTTg1MExfY29uZmlnCisJRkFEUzg2MFRfY29uZmlnCQlvbWFwMTUxMGlubl9jb25maWcJVFFNODU1TF9jb25maWcKKwlGUFM4NTBMX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJVFFNODYwTF9jb25maWcKKwkJCQlvbWFwMTYxMGlubl9jb25maWcJd2FsbnV0X2NvbmZpZworCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwlZdWtvbjgyMjBfY29uZmlnCisJCQkJb21hcDI0MjBoNF9jb25maWcJWlBDMTkwMF9jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgaWYKICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGJvYXJkIHZlbmRvcjsgZm9yCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZSBiL2JvYXJkL21wYzc0NDhocGMyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZDc1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZQpAQCAtMCwwICsxLDUyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSAkKEJPQVJEKS5vIHRzaTEwOF9pbml0Lm8KK1NPQkpTCTo9IGFzbV9pbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworLlBIT05ZOiBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgKCRvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9hc21faW5pdC5TIGIvYm9hcmQvbXBjNzQ0OGhwYzIvYXNtX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E0MGExCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvYXNtX2luaXQuUwpAQCAtMCwwICsxLDkxOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0wNTsgIFR1bmRyYSBTZW1pY29uZHVjdG9yIENvcnAuCisgKgorICogQWRkZWQgYXV0b21hdGljIGRldGVjdCBvZiBTREMgc2V0dGluZ3MKKyAqIENvcHlyaWdodCAoYykgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogTWFpbnRhaW5lciB0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBGSUxFTkFNRTogYXNtX2luaXQucworICoKKyAqIE9yaWdpbmF0b3I6IEFsZXggQm91bmluZQorICoKKyAqIERFU0NSSVBUSU9OOgorICogSW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIFR1bmRyYSBUc2kxMDggYnJpZGdlIGNoaXAKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPHRzaTEwOC5oPgorCisvKgorICogQnVpbGQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKworLyogI2RlZmluZSBESVNBQkxFX1BCTQkJZGlzYWJsZXMgdXNhZ2Ugb2YgUEIgTWFzdGVyICovCisvKiAjZGVmaW5lIFNEQ19IQVJEQ09ERURfSU5JVAljb25maWcgU0RSQU0gY29udHJvbGxlciB3aXRoIGhhcmRjb2RlZCB2YWx1ZXMgKi8KKy8qICNkZWZpbmUgU0RDX0FVVE9QUkVDSF9FTgllbmFibGUgU0RSQU0gYXV0byBwcmVjaGFyZ2UgKi8KKworLyoKKyAqIEhhcmRjb2RlZCBTREMgc2V0dGluZ3MKKyAqLworCisjaWZkZWYgU0RDX0hBUkRDT0RFRF9JTklUCisKKy8qIE1pY3JvbiBNVDlIVEY2NDcyQVktNDBFQTEgOiBVbmJ1ZmZlcmVkLCA1MTJNQiwgNDAwLCBDTDMsIFNpbmdsZSBSYW5rICovCisKKyNkZWZpbmUgVkFMX1NEX1JFRlJFU0gJKDB4NjFBKQorI2RlZmluZSBWQUxfU0RfVElNSU5HCSgweDAzMDgzMzZiKQorI2RlZmluZSBWQUxfU0RfRDBfQ1RSTAkoMHgwNzEwMDAyMSkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNkZWZpbmUgVkFMX1NEX0QwX0JBUgkoMHgwRkUwMDAwMCkJLyogNTEyTUIgQCAweDAwMDAwMDAwICovCisjZGVmaW5lIFZBTF9TRF9EMV9DVFJMCSgweDA3MTAwMDIxKQkvKiBhdXRvLXByZWNoYXJnZSBkaXNhYmxlZCAqLworI2RlZmluZSBWQUxfU0RfRDFfQkFSCSgweDBGRTAwMjAwKQkvKiA1MTJNQiBAIDB4MjAwMDAwMDAgKi8KKworI2VuZGlmIC8qIFNEQ19IQVJEQ09ERURfSU5JVCAqLworCisvKgorIENQVSBDb25maWd1cmF0aW9uOgorCisgQ1BVIEFkZHJlc3MgYW5kIERhdGEgUGFyaXR5IGVuYWJsZXMuCisKKyNkZWZpbmUgQ1BVX0FQCisjZGVmaW5lIENQVV9EUAorKi8KKworLyoKKyAqIE1hY3JvcworICogISEhIEF0dGVudGlvbiAhISEgTWFjcm9zIExPQURfUFRSLCBMT0FEX1UzMiBhbmQgTE9BRF9NRU0gZGVmaW5lZCBiZWxvdyBhcmUKKyAqIGV4cGVjdGVkIHRvIHdvcmsgY29ycmVjdGx5IGZvciB0aGUgQ1NSIHNwYWNlIHdpdGhpbiAzMktCIHJhbmdlLgorICoKKyAqIExPQURfUFRSIGFuZCBMT0FEX1UzMiAtIGxvYWQgc3BlY2lmaWVkIHJlZ2lzdGVyIHdpdGggYSAzMiBiaXQgY29uc3RhbnQuCisgKiBUaGVzZSBtYWNyb3MgYXJlIGFic29sdXRlbHkgaWRlbnRpY2FsIGV4Y2VwdCB0aGVpciBuYW1lcy4gVGhpcyBkaWZmZXJlbmNlCisgKiBpcyBwcm92aWRlZCBpbnRlbnRpb25hbGx5IGZvciBiZXR0ZXIgcmVhZGFibGUgY29kZS4KKyAqLworCisjZGVmaW5lIExPQURfUFRSKHJlZyxjb25zdDMyKSBcCisJYWRkaXMgcmVnLHIwLGNvbnN0MzJAaDsgb3JpIHJlZyxyZWcsY29uc3QzMkBsCisKKyNkZWZpbmUgTE9BRF9VMzIocmVnLGNvbnN0MzIpIFwKKwlhZGRpcyByZWcscjAsY29uc3QzMkBoOyBvcmkgcmVnLHJlZyxjb25zdDMyQGwKKworLyogTE9BRE1FTSBpbml0aWFsaXplcyBhIHJlZ2lzdGVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgc3BlY2lmaWVkIDMyLWJpdAorICogbWVtb3J5IGxvY2F0aW9uLCB1c3VhbGx5IGEgQ1NSIHZhbHVlLgorICovCisKKyNkZWZpbmUgTE9BRF9NRU0ocmVnLGFkZHIzMikgXAorCWFkZGlzIHJlZyxyMCxhZGRyMzJAaGE7IGx3eiByZWcsYWRkcjMyQGwocmVnKQorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorc2RjX2Nsa19zeW5jOgorCS8qIE1IejogMCwwLDE4MywxMDAsMTMzLDE2NywyMDAsMjMzICovCisJLmxvbmcJMCwgMCwgNiwgMTAsIDgsIDYsIDUsIDQJCS8qIG5TZWMgKi8KKyNlbmRpZgorCisvKgorICogYm9hcmRfYXNtX2luaXQoKSAtIGVhcmx5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBDb2RlZCB0byBiZSBwb3J0YWJsZSB0bworICogZHVhbC1DUFUgY29uZmlndXJhdGlvbi4KKyAqIENoZWNrcyBDUFUgbnVtYmVyIGFuZCBwZXJmb3JtcyBib2FyZCBIVyBpbml0aWFsaXphdGlvbiBpZiBjYWxsZWQgZm9yIENQVTAuCisgKiBSZWdpc3RlcnMgdXNlZDogcjMscjQscjUscjYscjE5LHIyOQorICoKKyAqIE5PVEU6IEZvciBkdWFsLUNQVSBjb25maWd1cmF0aW9uIG9ubHkgQ1BVMCBpcyBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBUc2kxMDgKKyAqIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9hcmQuIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGVtb25zdHJhdGVzIHR3bworICogcG9zc2libGUgd2F5cyB0byBpZGVudGlmeSBDUFUgbnVtYmVyOgorICogLSBmb3IgTVBDNzR4eCBwbGF0Zm9ybTogdXNlcyBNU1NDUjBbSURdIGJpdCBhcyBkZWZpbmVkIGluIFVNLgorICogLSBmb3IgUFBDNzUwRlgvR1ggYm9hcmRzOiB1c2VzIFdIT19BTV9JIGJpdCByZXBvcnRlZCBieSBUc2kxMDguCisgKi8KKworCS5nbG9ibCBib2FyZF9hc21faW5pdAorYm9hcmRfYXNtX2luaXQ6CisJbWZscglyMTkJLyogU2F2ZSBMUiB0byBiZSBhYmxlIHJldHVybiBsYXRlci4gKi8KKwlibAlpY2FjaGVfZW5hYmxlCS8qIEVuYWJsZSBpY2FjaGUgdG8gcmVkdWNlIHJlYWRzIGZyb20gZmxhc2guICovCisKKy8qIEluaXRpYWxpemUgcG9pbnRlciB0byBUc2kxMDggcmVnaXN0ZXIgc3BhY2UgKi8KKworCUxPQURfUFRSKHIyOSxDRkdfVFNJMTA4X0NTUl9SU1RfQkFTRSkvKiByMjkgLSBwb2ludGVyIHRvIHRzaTEwOCBDU1Igc3BhY2UgKi8KKwlvcmkgcjQscjI5LFRTSTEwOF9QQl9SRUdfT0ZGU0VUCisKKy8qIENoZWNrIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlciAqLworCisJbWZzcHIJcjMsIFBWUgorCXJsd2lubQlyMyxyMywxNiwxNiwyMwkvKiBnZXQgKChQcm9jZXNzb3IgVmVyc2lvbiBOdW1iZXIpICYgMHhGRjAwKSAqLworCisJY21wbGkJMCwwLHIzLDB4ODAwMAkvKiBNUEM3NHh4ICovCisJYm5lCWNvbnRfYnJkX2luaXQKKworCS8qCisJICogRm9yIE1QQzc0NHgvNXggZW5hYmxlIGV4dGVuZGVkIEJBVHNbNC03XQorCSAqIFNyaTogU2V0IEhJR0hfQkFUX0VOIGFuZCBYQlNFTiwgYW5kIFNQRCA9MQorCSAqIHRvIGRpc2FibGUgcHJlZmV0Y2gKKwkgKi8KKworCW1mc3ByCXI1LCBISUQwCisJb3JpcwlyNSwgcjUsIDB4MDA4MAkvKiBTZXQgSElEMFtISUdIX0JBVF9FTl0gYml0ICM4ICovCisJb3JpCXI1LCByNSwgMHgwMzgwCS8qIFNldCBTUEQsWEJTRU4sU0dFIGJpdHMgIzIyLDIzLDI0ICovCisJbXRzcHIJSElEMCwgcjUKKwlpc3luYworCXN5bmMKKworCS8qIEFkZGluZyBjb2RlIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJ2ZW50aW9ucyBpbiBNUFggYnVzIG1vZGUgKi8KKwltZnNwcglyMywgMTAxNAorCW9yaXMJcjMsIHIzLCAweDAxMDAJLyogU2V0IHRoZSBFSURJUyBiaXQgaW4gTVNTQ1IwOiAgYml0IDcgKi8KKwltdHNwcgkxMDE0LCByMworCWlzeW5jCisJc3luYworCisJLyogU3JpOiBjb2RlIHRvIGVuYWJsZSBGUCB1bml0ICovCisJbWZtc3IJcjMKKwlvcmkJcjMsIHIzLCAweDIwMDAKKwltdG1zcglyMworCWlzeW5jCisJc3luYworCisJLyogZGVmIENPTkZJR19EVUFMX0NQVQorCSAqIEZvciBNUEM3NHh4IHByb2Nlc3NvciwgdXNlIE1TU0NSMFtJRF0gYml0IHRvIGlkZW50aWZ5IENQVSBudW1iZXIuCisJICovCisjaWYoMSkKKwltZnNwcglyMywxMDE0CQkvKiByZWFkIE1TU0NSMCAqLworCXJsd2lubS4JcjMscjMsMjcsMzEsMzEJLyogZ2V0IHByb2Nlc3NvciBJRCBudW1iZXIgKi8KKwltdHNwcglTUFJOX1BJUixyMwkvKiBTYXZlIENQVSBJRCAqLworCXN5bmMKKwlibmUJaW5pdF9kb25lCisJYglkb190c2kxMDhfaW5pdAorCitjb250X2JyZF9pbml0OgorCisJLyogQW4gYWx0ZXJuYXRpdmUgbWV0aG9kIG9mIGNoZWNraW5nIHRoZSBwcm9jZXNzb3IgbnVtYmVyIChpbiBhZGRpdGlvbgorCSAqIHRvIGNvbmZpZ3VyYXRpb24gdXNpbmcgTVNTQ1IwW0lEXSBiaXQgb24gTVBDNzR4eCkuCisJICogR29vZCBmb3IgSUJNIFBQQzc1MEZYL0dYLgorCSAqLworCisJbHd6CXIzLFBCX0JVU19NU19TRUxFQ1QocjQpCS8qIHJlYWQgUEJfSUQgcmVnaXN0ZXIgKi8KKwlybHdpbm0uCXIzLHIzLDI0LDMxLDMxCQkvKiBnZXQgcHJvY2Vzc29yIElEIG51bWJlciAqLworCWJuZSBpbml0X2RvbmUKKyNlbHNlCisKK2NvbnRfYnJkX2luaXQ6CisKKyNlbmRpZiAvKiBDT05GSUdfRFVBTF9DUFUgKi8KKworCS8qIEluaXRpYWxpemUgVHNpMTA4IGNoaXAgKi8KKworZG9fdHNpMTA4X2luaXQ6CisKKwkvKgorCSAqIEFkanVzdCBITFAvRmxhc2ggcGFyYW1ldGVycy4gQnkgZGVmYXVsdCBhZnRlciByZXNldCB0aGUgSExQIHBvcnQgaXMKKwkgKiBzZXQgdG8gc3VwcG9ydCBzbG93IGRldmljZXMuIEJldHRlciBwZXJmb3JtYW5jZSBjYW4gYmUgYWNoaXZlZCB3aGVuCisJICogYW4gb3B0aW1hbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBzcGVjaWZpYyBFUFJPTSBkZXZpY2UuCisJICogTk9URTogVGhpcyBzaG91bGQgYmUgcGVyZm9ybWVkIEFTQVAgZm9yIHRoZSBlbXVsYXRpb24gcGxhdGZvcm0KKwkgKiBiZWNhdXNlIGl0IGhhcyA1TUh6IEhMUCBjbG9ja2luZy4KKwkgKi8KKworI2lmZGVmIENPTkZJR19UU0kxMDhFTVUKKwlvcmkJcjQscjI5LFRTSTEwOF9ITFBfUkVHX09GRlNFVAorCUxPQURfVTMyKHI1LDB4NDM0NDIyYzApCisJc3R3CXI1LDB4MDgocjQpCS8qIHNldCBITFAgQjBfQ1RSTDAgKi8KKwlzeW5jCisJTE9BRF9VMzIocjUsMHhkMDAxMjAwMCkKKwlzdHcJcjUsMHgwYyhyNCkJCS8qIHNldCBITFAgQjBfQ1RSTDEgKi8KKwlzeW5jCisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgUEIgaW50ZXJmYWNlLiAqLworCisJb3JpIHI0LHIyOSxUU0kxMDhfUEJfUkVHX09GRlNFVAorCisjaWYgKENGR19UU0kxMDhfQ1NSX0JBU0UgIT0gQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UpCisJLyogUmVsb2NhdGUgKGlmIHJlcXVpcmVkKSBUc2kxMDggcmVnaXN0ZXJzLiBTZXQgbmV3IHZhbHVlIGZvcgorCSAqIFBCX1JFR19CQVI6CisJICogTm90ZSB3ZSBhcmUgaW4gdGhlIDMyLWJpdCBhZGRyZXNzIG1vZGUuCisJICovCisJTE9BRF9VMzIocjUsKENGR19UU0kxMDhfQ1NSX0JBU0UgfCAweDAxKSkgLyogUEJfUkVHX0JBUjogQkEgKyBFTiAqLworCXN0dwlyNSxQQl9SRUdfQkFSKHI0KQorCWFuZGlzLglyMjkscjUsMHhGRkZGCisJc3luYworCW9yaQlyNCxyMjksVFNJMTA4X1BCX1JFR19PRkZTRVQKKyNlbmRpZgorCisJLyogU2V0IFBCIFNsYXZlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKworCUxPQURfVTMyKHI1LDB4MDAwMDI0ODEpCS8qIFBCX1NDUjogVEVBIGVuYWJsZWQsQUFDSyBkZWxheSA9IDEgKi8KKwlsd3oJcjMsIFBCX1JTUihyNCkJLyogZ2V0IFBCIGJ1cyBtb2RlICovCisJeG9yaQlyMyxyMywweDAwMDEJLyogbWFzayBQQl9CTU9ERTogcjMgLT4gKDAgPSA2MFgsIDEgPSBNUFgpICovCisJcmx3aW1pICByNSxyMywxNCwxNywxNwkvKiBmb3IgTVBYOiBzZXQgRFRJX01PREUgYml0ICovCisJc3R3CXI1LFBCX1NDUihyNCkKKwlzeW5jCisKKwkvKiBDb25maWd1cmUgUEIgQXJiaXRlciAqLworCisJbHd6CXI1LFBCX0FSQl9DVFJMKHI0KQkvKiBSZWFkIFBCIEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworCWxpCXIzLCAweDAwRjAJCS8qIEFSQl9QSVBFTElORV9ERVAgbWFzayAqLworI2lmZGVmIERJU0FCTEVfUEJNCisJb3JpCXIzLHIzLDB4MTAwMAkvKiBhZGQgUEJNX0VOIHRvIGNsZWFyIChlbmFibGVkIGJ5IGRlZmF1bHQpICovCisjZW5kaWYKKwlhbmRjCXI1LHI1LHIzCS8qIENsZWFyIHRoZSBtYXNrZWQgYml0IGZpZWxkcyAqLworCW9yaQlyNSxyNSwweDAwMDEJLyogU2V0IHBpcGVsaW5lIGRlcHRoICovCisJc3R3CXI1LFBCX0FSQl9DVFJMKHI0KQorCisjaWYgKDApCS8qIGN1cnJlbnRseSB1c2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgUEJNIGFmdGVyIHJlc2V0ICovCisJTE9BRF9VMzIocjUsMHgpCQkvKiB2YWx1ZSBmb3IgUEJfTUNSICovCisJc3R3CXI1LFBCX01DUihyNCkKKwlzeW5jCisKKwlMT0FEX1UzMihyNSwweCkJCS8qIHZhbHVlIGZvciBQQl9NQ01EICovCisJc3R3CXI1LFBCX01DTUQocjQpCisJc3luYworI2VuZGlmCisKKwkvKiBEaXNhYmxlIG9yIGVuYWJsZSBQVlQgYmFzZWQgb24gcHJvY2Vzc29yIGJ1cyBmcmVxdWVuY3kKKwkgKiAxLiBSZWFkIENHX1BXUlVQX1NUQVRVUyByZWdpc3RlciBmaWVsZCBiaXRzIDE4LDE3LDE2CisJICogMi4gU2VlIGlmIHRoZSB2YWx1ZSBpcyA8IG9yID4gMTMzbWh6ICgxODoxNiA9IDEwMCkKKwkgKiAzLiBJZiA+IGVuYWJsZSBQVlQKKwkgKi8KKworCUxPQURfVTMyKHIzLDB4QzAwMDIyMzQpCisJbHd6CXIzLDAocjMpCisJcmx3aW5tCXIzLHIzLDE2LDI5LDMxCisKKwljbXBpCTAsMCxyMywweDAwMDQKKwliZ3QJc2RjX2luaXQKKworI2lmbmRlZiBDT05GSUdfVFNJMTA4RU1VCisJLyogRklYTUU6IERpc2FibGUgUEIgY2FsaWJyYXRpb24gY29udHJvbCBmb3IgYW55IHJlYWwgVHNpMTA4IGJvYXJkICovCisJbGkJcjUsMHgwMTAxCS8qIGRpc2FibGUgY2FsaWJyYXRpb24gY29udHJvbCAqLworCXN0dwlyNSxQQl9QVlRfQ1RSTDIocjQpCisJc3luYworI2VuZGlmCisKKwkvKiBJbml0aWFsaXplIFNEUkFNIGNvbnRyb2xsZXIuICovCisKK3NkY19pbml0OgorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorCS8qIGdldCBTREMgY2xvY2sgcHJpb3IgZG9pbmcgc2RyYW0gY29udHJvbGxlciBhdXRvY29uZmlnICovCisJb3JpCXI0LHIyOSxUU0kxMDhfQ0xLX1JFR19PRkZTRVQJLyogcjQgLSBwdHIgdG8gQ0cgcmVnaXN0ZXJzICovCisJbHd6CXIzLCBDR19QV1JVUF9TVEFUVVMocjQpCQkvKiBnZXQgQ0cgY29uZmlndXJhdGlvbiAqLworCXJsd2lubQlyMyxyMywxMiwyOSwzMQkJCS8qIHIzIC0gU0QgY2xrICovCisJbGlzCXI1LHNkY19jbGtfc3luY0BoCisJb3JpCXI1LHI1LHNkY19jbGtfc3luY0BsCisJLyogU3JpOiAgQXQgdGhpcyBwb2ludCBjaGVjayBpZiByMyA9IDAwMS4gSWYgeWVzLAorCSAqIHRoZSBtZW1vcnkgZnJlcXVlbmN5IHNob3VsZCBiZSBzYW1lIGFzIHRoZQorCSAqIE1QWCBidXMgZnJlcXVlbmN5CisJICovCisJY21waQkwLDAscjMsMHgwMDAxCisJYm5lCWdldF9uc2VjCisJbHd6CXI2LCBDR19QV1JVUF9TVEFUVVMocjQpCisJcmx3aW5tCXI2LHI2LDE2LDI5LDMxCisJbXIJcjMscjYKKworZ2V0X25zZWM6CisJcmx3aW5tCXIzLHIzLDIsMCwzMQorCWx3engJcjkscjUscjMJLyogZ2V0IFNEIGNsayByYXRlIGluIG5TZWMgKi8KKwkvKiBBVFROOiByOSB3aWxsIGJlIHVzZWQgYnkgU1BEIHJvdXRpbmUgKi8KKyNlbmRpZiAvKiAhU0RDX0hBUkRDT0RFRF9JTklUICovCisKKwlvcmkJcjQscjI5LFRTSTEwOF9TRF9SRUdfT0ZGU0VUIC8qIHI0IC0gcHRyIHRvIFNEUkFNIHJlZ2lzdGVycyAqLworCisJLyogSW5pdGlhbGl6ZSBTRFJBTSBjb250cm9sbGVyLiBTRFJBTSBTaXplID0gNTEyTUIsIE9uZSBESU1NLiAqLworCisJTE9BRF9VMzIocjUsMHgwMCkKKwlzdHcJcjUsU0RfSU5UX0VOQUJMRShyNCkgLyogRW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KKyNpZmRlZiBFTkFCTEVfU0RSQU1fRUNDCisJbGkJcjUsIDB4MDEKKyNlbmRpZiAvKiBFTkFCTEVfU0RSQU1fRUNDICovCisJc3R3CXI1LFNEX0VDQ19DVFJMKHI0KQkvKiBFbmFibGUvRGlzYWJsZSBFQ0MgKi8KKwlzeW5jCisKKyNpZmRlZiBTRENfSEFSRENPREVEX0lOSVQgLyogY29uZmlnIHNkcmFtIGNvbnRyb2xsZXIgd2l0aCBoYXJkY29kZWQgdmFsdWVzICovCisKKwkvKiBGaXJzdCByZWFkIHRoZSBDR19QV1JVUF9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZQorCSAqIG1lbW9yeSBzcGVlZCBmcm9tIGJpdHMgMjIsMjEsMjAKKwkgKi8KKworCUxPQURfVTMyKHIzLDB4QzAwMDIyMzQpCisJbHd6CXIzLDAocjMpCisJcmx3aW5tCXIzLHIzLDEyLDI5LDMxCisKKwkvKiBOb3cgZmlyc3QgY2hlY2sgZm9yIDE2NiwgdGhlbiAyMDAsIG9yIGRlZmF1bHQgKi8KKworCWNtcGkJMCwwLHIzLDB4MDAwNQorCWJuZQljaGVja19mb3JfMjAwbWh6CisKKwkvKiBzZXQgdmFsdWVzIGZvciAxNjYgTWh6IG1lbW9yeSBzcGVlZAorCSAqIFNldCByZWZyZXNoIHJhdGUgYW5kIHRpbWluZyBwYXJhbWV0ZXJzCisJICovCisJTE9BRF9VMzIocjUsMHgwMDAwMDUxNSkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSwweDAzMDczMzY4KQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDBfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDBfQkFSKQorCXN0dwlyNSxTRF9EMF9CQVIocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMSBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzCisJICogKHNhbWUgYXMgZGltbSAwLCBuZXh0IDUxMk1CLCBkaXNhYmxlZCkKKwkgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQ1RSTCkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNSxyNSwweDAwMDEJLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisJc3R3CXI1LFNEX0QxX0NUUkwocjQpCisJTE9BRF9VMzIocjUsVkFMX1NEX0QxX0JBUikKKwlzdHcJcjUsU0RfRDFfQkFSKHI0KQorCXN5bmMKKworCWIJc2RjX2luaXRfZG9uZQorCitjaGVja19mb3JfMjAwbWh6OgorCisJY21waQkwLDAscjMsMHgwMDA2CisJYm5lCXNldF9kZWZhdWx0X3ZhbHVlcworCisJLyogc2V0IHZhbHVlcyBmb3IgMjAwTWh6IG1lbW9yeSBzcGVlZAorCSAqIFNldCByZWZyZXNoIHJhdGUgYW5kIHRpbWluZyBwYXJhbWV0ZXJzCisJICovCisJTE9BRF9VMzIocjUsMHgwMDAwMDYxYSkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSwweDAzMDgzMzQ4KQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDBfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDBfQkFSKQorCXN0dwlyNSxTRF9EMF9CQVIocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMSBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzCisJICogKHNhbWUgYXMgZGltbSAwLCBuZXh0IDUxMk1CLCBkaXNhYmxlZCkKKwkgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQ1RSTCkJLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNSxyNSwweDAwMDEJCS8qIHNldCBhdXRvIHByZWNoYXJnZSBFTiBiaXQgKi8KKyNlbmRpZgorCXN0dwlyNSxTRF9EMV9DVFJMKHI0KQorCUxPQURfVTMyKHI1LFZBTF9TRF9EMV9CQVIpCisJc3R3CXI1LFNEX0QxX0JBUihyNCkKKwlzeW5jCisKKwliCXNkY19pbml0X2RvbmUKKworc2V0X2RlZmF1bHRfdmFsdWVzOgorCisJLyogU2V0IHJlZnJlc2ggcmF0ZSBhbmQgdGltaW5nIHBhcmFtZXRlcnMgKi8KKwlMT0FEX1UzMihyNSxWQUxfU0RfUkVGUkVTSCkKKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfVElNSU5HKQorCXN0dwlyNSxTRF9USU1JTkcocjQpCisJc3luYworCisJLyogSW5pdGlhbGl6ZSBESU1NMCBjb250cm9sIGFuZCBCQVIgcmVnaXN0ZXJzICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcgCXI1LFNEX0QwX0NUUkwocjQpCisJTE9BRF9VMzIocjUsVkFMX1NEX0QwX0JBUikKKwlzdHcJcjUsU0RfRDBfQkFSKHI0KQorCXN5bmMKKworCS8qIEluaXRpYWxpemUgRElNTTEgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycworCSAqIChzYW1lIGFzIGRpbW0gMCwgbmV4dCA1MTJNQiwgZGlzYWJsZWQpCisJICovCisJTE9BRF9VMzIocjUsVkFMX1NEX0QxX0NUUkwpCS8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorCW9yaXMJcjUscjUsMHgwMDAxCQkvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKwlzdHcJcjUsU0RfRDFfQ1RSTChyNCkKKwlMT0FEX1UzMihyNSxWQUxfU0RfRDFfQkFSKQorCXN0dwlyNSxTRF9EMV9CQVIocjQpCisJc3luYworI2Vsc2UgLyogIVNEQ19IQVJEQ09ERURfSU5JVCAqLworCWJsCXRzaTEwOF9zZHJhbV9zcGQJLyogYXV0b21hdGljYWxseSBkZXRlY3QgU0RDIHNldHRpbmdzICovCisjZW5kaWYgLyogU0RDX0hBUkRDT0RFRF9JTklUICovCisKK3NkY19pbml0X2RvbmU6CisKKyNpZmRlZiBESVNBQkxFX1BCTQorCUxPQURfVTMyKHI1LDB4MDAwMDAwMzApCQkvKiBQQl9FTiArIE9DTl9FTiAqLworI2Vsc2UKKwlMT0FEX1UzMihyNSwweDAwMDAwMjMwKQkJLyogUEJfRU4gKyBPQ05fRU4gKyBQQi9PQ049ODAvMjAgKi8KKyNlbmRpZiAvKiBESVNBQkxFX1BCTSAqLworCisjaWZkZWYgQ09ORklHX1RTSTEwOEVNVQorCW9yaXMJcjUscjUsMHgwMDEwCQkvKiBzZXQgRU1VTEFUSU9OX01PREUgYml0ICovCisjZW5kaWYKKworCXN0dwlyNSxTRF9DVFJMKHI0KQorCWVpZWlvCisJc3luYworCisJLyogRW5hYmxlIFNEUkFNIGFjY2VzcyAqLworCisJb3JpcwlyNSxyNSwweDgwMDAJCS8qIHN0YXJ0IFNEQzogc2V0IFNEX0NUUkxbRU5BQkxFXSBiaXQgKi8KKwlzdHcJcjUsU0RfQ1RSTChyNCkKKwlzeW5jCisKK3dhaXRfaW5pdF9jb21wbGV0ZToKKwlsd3oJcjUsU0RfU1RBVFVTKHI0KQorCWFuZGkuCXI1LHI1LDB4MDAwMQorCS8qIHdhaXQgdW50aWwgU0RSQU0gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKwliZXEJd2FpdF9pbml0X2NvbXBsZXRlCisKKwkvKiBNYXAgU0RSQU0gaW50byB0aGUgcHJvY2Vzc29yIGJ1cyBhZGRyZXNzIHNwYWNlICovCisKKwlvcmkJcjQscjI5LFRTSTEwOF9QQl9SRUdfT0ZGU0VUCisKKwkvKiBTZXR1cCBCQVJzIGFzc29jaWF0ZWQgd2l0aCBkaXJlY3QgcGF0aCBQQjwtPlNEUkFNICovCisKKwkvKiBQQl9TRFJBTV9CQVIxOgorCSAqIHByb3ZpZGVzIGEgZGlyZWN0IHBhdGggdG8gdGhlIG1haW4gc3lzdGVtIG1lbW9yeSAoY2FjaGVhYmxlIFNEUkFNKQorCSAqLworCisJLyogQkE9MCxTaXplPTUxMk1CLCBFTmFibGUsIE5vIEFkZHIuVHJhbnNsYXRpb24gKi8KKwlMT0FEX1UzMihyNSwgMHgwMDAwMDAxMSkKKwlzdHcJcjUsUEJfU0RSQU1fQkFSMShyNCkKKwlzeW5jCisKKwkvKiBNYWtlIHN1cmUgdGhhdCBQQl9TRFJBTV9CQVIxIGRlY29kZXIgaXMgc2V0CisJICogKHRvIGFsbG93IGZvbGxvd2luZyBpbW1lZGlhdGUgcmVhZCBmcm9tIFNEUkFNKQorCSAqLworCWx3eglyNSxQQl9TRFJBTV9CQVIxKHI0KQorCXN5bmMKKworCS8qIFBCX1NEUkFNX0JBUjI6CisJICogcHJvdmlkZXMgbm9uLWNhY2hlYWJsZSBhbGlhcyAodmlhIHRoZSBkaXJlY3QgcGF0aCkgdG8gbWFpbgorCSAqIHN5c3RlbSBtZW1vcnkuCisJICogU2l6ZSA9IDUxMk1CLCBFTmFibGUsIEFkZHIuVHJhbnNsYXRpb24gLSBPTiwKKwkgKiBCQSA9IDB4MF80MDAwMDAwMCwgVEEgPSAweDBfMDAwMDAwMDAKKwkgKi8KKworCUxPQURfVTMyKHI1LCAweDQwMDEwMDExKQorCXN0dwlyNSxQQl9TRFJBTV9CQVIyKHI0KQorCXN5bmMKKworCS8qIE1ha2Ugc3VyZSB0aGF0IFBCX1NEUkFNX0JBUjIgZGVjb2RlciBpcyBzZXQKKwkgKiAodG8gYWxsb3cgZm9sbG93aW5nIGltbWVkaWF0ZSByZWFkIGZyb20gU0RSQU0pCisJICovCisJbHd6CXI1LFBCX1NEUkFNX0JBUjIocjQpCisJc3luYworCitpbml0X2RvbmU6CisKKwkvKiBBbGwgZG9uZS4gUmVzdG9yZSBMUiBhbmQgcmV0dXJuLiAqLworCW10bHIJcjE5CisJYmxyCisKKyNpZiAoMCkKKwkvKgorCSAqIGluaXRfY3B1MQorCSAqIFRoaXMgcm91dGluZSBlbmFibGVzIENQVTEgb24gdGhlIGR1YWwtcHJvY2Vzc29yIHN5c3RlbS4KKwkgKiBOb3cgdGhlcmUgaXMgb25seSBvbmUgcHJvY2Vzc29yIGluIHRoZSBzeXN0ZW0KKwkgKi8KKworCS5nbG9iYWwgZW5hYmxlX2NwdTEKK2VuYWJsZV9jcHUxOgorCisJbGlzCXIzLFRzaTEwOF9CYXNlQGhhCS8qIEdldCBHcmVuZGVsIENTUiBCYXNlIEFkZHIgKi8KKwlhZGRpCXIzLHIzLFRzaTEwOF9CYXNlQGwKKwlsd3oJcjMsMChyMykJCS8qIFIzID0gQ1NSIEJhc2UgQWRkciAqLworCW9yaQlyNCxyMyxUU0kxMDhfUEJfUkVHX09GRlNFVAorCWx3eglyMyxQQl9BUkJfQ1RSTChyNCkJLyogUmVhZCBQQiBBcmJpdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlvcmkJcjMscjMsMHgwMjAwCQkvKiBTZXQgTTFfRU4gYml0ICovCisJc3R3CXIzLFBCX0FSQl9DVFJMKHI0KQorCisJYmxyCisjZW5kaWYKKworCS8qCisJICogZW5hYmxlX0VJCisJICogRW5hYmxlIENQVSBjb3JlIGV4dGVybmFsIGludGVycnVwdAorCSAqLworCisJLmdsb2JhbAllbmFibGVfRUkKK2VuYWJsZV9FSToKKwltZm1zcglyMworCW9yaQlyMyxyMywweDgwMDAJLyogc2V0IEVFIGJpdCAqLworCW10bXNyCXIzCisJYmxyCisKKwkvKgorCSAqIGRpc2FibGVfRUkKKwkgKiBEaXNhYmxlIENQVSBjb3JlIGV4dGVybmFsIGludGVycnVwdAorCSAqLworCisJLmdsb2JhbCBkaXNhYmxlX0VJCitkaXNhYmxlX0VJOgorCW1mbXNyCXIzCisJbGkJcjQsLTMyNzY4CS8qIGFrYSAibGkgIHI0LDB4ODAwMCIgKi8KKwlhbmRjCXIzLHIzLHI0CS8qIGNsZWFyIEVFIGJpdCAqLworCW10bXNyCXIzCisJYmxyCisKKyNpZmRlZiBFTkFCTEVfU0RSQU1fRUNDCisJLyogZW5hYmxlcyBTRFJBTSBFQ0MgICovCisKKwkuZ2xvYmFsCWVuYWJsZV9FQ0MKK2VuYWJsZV9FQ0M6CisJb3JpCXI0LHIyOSxUU0kxMDhfU0RfUkVHX09GRlNFVAorCWx3eglyMyxTRF9FQ0NfQ1RSTChyNCkJLyogUmVhZCBTRFJBTSBFQ0MgQ29udHJvbCBSZWdpc3RlciAqLworCW9yaQlyMyxyMywweDAwMDEJCS8qIFNldCBFQ0NfRU4gYml0ICovCisJc3R3CXIzLFNEX0VDQ19DVFJMKHI0KQorCWJscgorCisJLyoKKwkgKiBjbGVhcl9FQ0NfZXJyCisJICogQ2xlYXJzIGFsbCBwZW5kaW5nIFNEUkFNIEVDQyBlcnJvcnMKKwkgKiAobm9ybWFsbHkgYWZ0ZXIgU0RSQU0gc2NydWJiaW5nL2luaXRpYWxpemF0aW9uKQorCSAqLworCisJLmdsb2JhbAljbGVhcl9FQ0NfZXJyCitjbGVhcl9FQ0NfZXJyOgorCW9yaSByNCxyMjksVFNJMTA4X1NEX1JFR19PRkZTRVQKKwlvcmkgcjMscjAsMHgwMDMwCS8qIEVDQ19VRV9JTlQgKyBFQ0NfQ0VfSU5UIGJpdHMgKi8KKwlzdHcgcjMsU0RfSU5UX1NUQVRVUyhyNCkKKwlibHIKKworI2VuZGlmIC8qIEVOQUJMRV9TRFJBTV9FQ0MgKi8KKworI2lmbmRlZiBTRENfSEFSRENPREVEX0lOSVQKKworCS8qIFNEUkFNIFNQRCBTdXBwb3J0ICovCisjZGVmaW5lCVNEX0kyQ19DVFJMMQkoMHg0MDApCisjZGVmaW5lCVNEX0kyQ19DVFJMMgkoMHg0MDQpCisjZGVmaW5lIFNEX0kyQ19SRF9EQVRBCSgweDQwOCkKKyNkZWZpbmUgU0RfSTJDX1dSX0RBVEEJKDB4NDBDKQorCisJLyoKKwkgKiBTRFJBTSBTUEQgU3VwcG9ydCBNYWNyb3MKKwkgKi8KKworI2RlZmluZSBTUERfRElNTTAJKDB4MDAwMDAxMDApCisjZGVmaW5lIFNQRF9ESU1NMQkoMHgwMDAwMDIwMCkJLyogU1BEX0RJTU0xIHdhcyAweDAwMDAwMDAwICovCisKKyNkZWZpbmUgU1BEX1JESU1NCQkJKDB4MDEpCisjZGVmaW5lIFNQRF9VRElNTQkJCSgweDAyKQorCisjZGVmaW5lIFNQRF9DQVNfMwkJCTB4OAorI2RlZmluZSBTUERfQ0FTXzQJCQkweDEwCisjZGVmaW5lIFNQRF9DQVNfNQkJCTB4MjAKKworI2RlZmluZSBFUlJfTk9fRElNTV9GT1VORAkJKDB4ZGIwKQorI2RlZmluZSBFUlJfVFJBU19GQUlMCQkJKDB4ZGIxKQorI2RlZmluZSBFUlJfVFJDRF9GQUlMCQkJKDB4ZGIyKQorI2RlZmluZSBFUlJfVFJQX0ZBSUwJCQkoMHhkYjMpCisjZGVmaW5lIEVSUl9UV1JfRkFJTAkJCSgweGRiNCkKKyNkZWZpbmUgRVJSX1VOS05PV05fUEFSVAkJKDB4ZGI1KQorI2RlZmluZSBFUlJfTlJBTktfSU5WQUxJRAkJKDB4ZGI2KQorI2RlZmluZSBFUlJfRElNTV9TSVpFCQkJKDB4ZGI3KQorI2RlZmluZSBFUlJfQUREUl9NT0RFCQkJKDB4ZGI4KQorI2RlZmluZSBFUlJfUkZSU0hfUkFURQkJCSgweGRiOSkKKyNkZWZpbmUgRVJSX0RJTU1fVFlQRQkJCSgweGRiYSkKKyNkZWZpbmUgRVJSX0NMX1ZBTFVFCQkJKDB4ZGJiKQorI2RlZmluZSBFUlJfVFJGQ19GQUlMCQkJKDB4ZGJjKQorCisvKiBSRUFEX1NQRCByZXF1aXJlbWVudHM6CisgKiBieXRlIC0gYnl0ZSBhZGRyZXNzIGluIFNQRCBkZXZpY2UgKDAgLSAyNTUpCisgKiByMyA9IHdpbGwgcmV0dXJuIGRhdGEgcmVhZCBmcm9tIEkyQyBCeXRlIGxvY2F0aW9uCisgKiByNCAtIHVuY2hhbmdlZCAoU0RDIGJhc2UgYWRkcikKKyAqIHI1IC0gY2xvYmJlcmVkIGluIHJvdXRpbmUgKEkyQyBzdGF0dXMpCisgKiByMTAgLSBudW1iZXIgb2YgRERSIHNsb3Qgd2hlcmUgZmlyc3QgU1BEIGRldmljZSBpcyBkZXRlY3RlZAorICovCisKKyNkZWZpbmUgUkVBRF9TUEQoYnl0ZV9udW0pCQlcCisJYWRkaXMJcjMsIDAsIGJ5dGVfbnVtQGw7CVwKKwlvcglyMywgcjMsIHIxMDsJCVwKKwlvcmkJcjMsIHIzLCAweDBBOwkJXAorCXN0dwlyMywgU0RfSTJDX0NUUkwxKHI0KTsJXAorCWxpCXIzLCBJMkNfQ05UUkwyX1NUQVJUOwlcCisJc3R3CXIzLCBTRF9JMkNfQ1RSTDIocjQpOwlcCisJZWllaW87CQkJCVwKKwlzeW5jOwkJCQlcCisJbGkJcjMsIDB4MTAwOwkJXAorMTo7CQkJCQlcCisJYWRkaWMuCXIzLCByMywgLTE7CQlcCisJYm5lCTFiOwkJCVwKKzI6OwkJCQkJXAorCWx3eglyNSwgU0RfSTJDX0NUUkwyKHI0KTsJXAorCXJsd2lubS4JcjMscjUsMCwyMywyMzsJCVwKKwlibmUJMmI7CQkJXAorCXJsd2lubS4JcjMscjUsMCwzLDM7CQlcCisJbHd6CXIzLFNEX0kyQ19SRF9EQVRBKHI0KQorCisjZGVmaW5lIFNQRF9NSU5fUkZSU0gJKDB4ODApCisjZGVmaW5lIFNQRF9NQVhfUkZSU0gJKDB4ODUpCisKK3JlZnJlc2hfcmF0ZXM6CS8qIGluIG5TZWMgKi8KKwkubG9uZwkxNTYyNQkvKiBOb3JtYWwgKDB4ODApICovCisJLmxvbmcJMzkwMAkvKiBSZWR1Y2VkIDAuMjV4ICgweDgxKSAqLworCS5sb25nCTc4MDAJLyogUmVkdWNlZCAwLjV4ICgweDgyKSAqLworCS5sb25nCTMxMzAwCS8qIEV4dGVuZGVkIDJ4ICgweDgzKSAqLworCS5sb25nCTYyNTAwCS8qIEV4dGVuZGVkIDR4ICgweDg0KSAqLworCS5sb25nCTEyNTAwMAkvKiBFeHRlbmRlZCA4eCAoMHg4NSkgKi8KKworLyoKKyAqIHRzaTEwOF9zZHJhbV9zcGQKKyAqCisgKiBJbml0dGlhbGl6ZXMgU0RSQU0gQ29udHJvbGxlciB1c2luZyBERFIyIERJTU0gU2VyaWFsIFByZXNlbmNlIERldGVjdCBkYXRhCisgKiBVc2VzIHJlZ2lzdGVyczogcjQgLSBTREMgYmFzZSBhZGRyZXNzIChub3QgY2hhbmdlZCkKKyAqCQkJCSAgIHI5IC0gU0RDIGNsb2NraW5nIHBlcmlvZCBpbiBuU2VjCisgKiBDaGFuZ2VzIHJlZ2lzdGVyczogcjMscjUscjYscjcscjgscjEwLHIxMQorICovCisKK3RzaTEwOF9zZHJhbV9zcGQ6CisKKwlsaQlyMTAsU1BEX0RJTU0wCisJeG9yCXIxMSxyMTEscjExCQkvKiBESU1NIEJhc2UgQWRkcmVzczogc3RhcnRzIGZyb20gMCAqLworCitkb19maXJzdF9kaW1tOgorCisJLyogUHJvZ3JhbSBSZWZyZXNoIFJhdGUJUmVnaXN0ZXIgKi8KKworCVJFQURfU1BEKDEyKQkJCS8qIGdldCBSZWZyZXNoIFJhdGUgKi8KKwliZXEJY2hlY2tfbmV4dF9zbG90CisJbGkJcjUsIEVSUl9SRlJTSF9SQVRFCisJY21waQkwLDAscjMsU1BEX01JTl9SRlJTSAorCWJsZQlzcGRfZmFpbAorCWNtcGkJMCwwLHIzLFNQRF9NQVhfUkZSU0gKKwliZ3QJc3BkX2ZhaWwKKwlhZGRpCXIzLHIzLC1TUERfTUlOX1JGUlNICisJcmx3aW5tCXIzLHIzLDIsMCwzMQorCWxpcwlyNSxyZWZyZXNoX3JhdGVzQGgKKwlvcmkJcjUscjUscmVmcmVzaF9yYXRlc0BsCisJbHd6eAlyNSxyNSxyMwkJLyogZ2V0IHJlZnJlc2ggcmF0ZSBpbiBuU2VjICovCisJZGl2d3UJcjUscjUscjkJCS8qIGNhbGN1bGF0ZSAjIG9mIFNEQyBjbG9ja3MgKi8KKwlzdHcJcjUsU0RfUkVGUkVTSChyNCkJLyogU2V0IHJlZnJlc2ggcmF0ZSAqLworCXN5bmMKKworCS8qIFByb2dyYW0gU0QgVGltaW5nIFJlZ2lzdGVyICovCisKKwlsaQlyNywgMAkJLyogY2xlYXIgcjcgcHJpb3IgcGFyYW1ldGVyIGNvbGxlY3Rpb24gKi8KKworCVJFQURfU1BEKDIwKQkJLyogZ2V0IERJTU0gdHlwZTogUmVnaXN0ZXJlZCBvciBVbmJ1ZmZlcmVkICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSwgRVJSX0RJTU1fVFlQRQorCWNtcGkJMCwwLHIzLFNQRF9VRElNTQorCWJlcQlkb19jbAorCWNtcGkJMCwwLHIzLFNQRF9SRElNTQorCWJuZQlzcGRfZmFpbAorCW9yaXMJcjcscjcsMHgxMDAwCS8qIHNldCBTRF9USU1JTkdbRElNTV9UWVBFXSBiaXQgKi8KKworZG9fY2w6CisJUkVBRF9TUEQoMTgpCQkvKiBHZXQgQ0FTIExhdGVuY3kgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpCXI1LEVSUl9DTF9WQUxVRQorCWFuZGkuCXI2LHIzLFNQRF9DQVNfMworCWJlcQljbF80CisJbGkJcjYsMworCWIJc2V0X2NsCitjbF80OgorCWFuZGkuCXI2LHIzLFNQRF9DQVNfNAorCWJlcQljbF81CisJbGkJcjYsNAorCWIJc2V0X2NsCitjbF81OgorCWFuZGkuCXI2LHIzLFNQRF9DQVNfNQorCWJlcQlzcGRfZmFpbAorCWxpCXI2LDUKK3NldF9jbDoKKwlybHdpbWkJcjcscjYsMjQsNSw3CisKKwlSRUFEX1NQRCgzMCkJCS8qIEdldCB0UkFTICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlkaXZ3dQlyNixyMyxyOQorCW11bGx3CXI4LHI2LHI5CisJc3ViZi4JcjgscjgscjMKKwliZXEJc2V0X3RyYXMKKwlhZGRpCXI2LHI2LDEKK3NldF90cmFzOgorCWxpIHI1LEVSUl9UUkFTX0ZBSUwKKwljbXBpCTAsMCxyNiwweDBGCS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3QJc3BkX2ZhaWwKKwlybHdpbWkJcjcscjYsMTYsMTIsMTUKKworCVJFQURfU1BEKDI5KQkvKiBHZXQgdFJDRCAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJLyogcmlnaHQgc2hpZnQgdFJDRCBieSAyIGJpdHMgYXMgcGVyIEREUjIgc3BlYyAqLworCXJsd2lubQlyMyxyMywzMCwyLDMxCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cmNkCisJYWRkaQlyNixyNiwxCitzZXRfdHJjZDoKKwlsaQlyNSxFUlJfVFJDRF9GQUlMCisJY21waQkwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDEyLDE3LDE5CisKKwlSRUFEX1NQRCgyNykJLyogR2V0IHRSUCB2YWx1ZSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tCXIzLHIzLDMwLDIsMzEJLyogcmlnaHQgc2hpZnQgdFJQIGJ5IDIgYml0cyBhcyBwZXIgRERSMiBzcGVjICovCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cnAKKwlhZGRpCXI2LHI2LDEKK3NldF90cnA6CisJbGkJcjUsRVJSX1RSUF9GQUlMCisJY21waQkwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDgsMjEsMjMKKworCVJFQURfU1BEKDM2KQkvKiBHZXQgdFdSIHZhbHVlICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlybHdpbm0JcjMscjMsMzAsMiwzMQkvKiByaWdodCBzaGlmdCB0V1IgYnkgMiBiaXRzIGFzIHBlciBERFIyIHNwZWMgKi8KKwlkaXZ3dQlyNixyMyxyOQorCW11bGx3CXI4LHI2LHI5CisJc3ViZi4JcjgscjgscjMKKwliZXEJc2V0X3R3cgorCWFkZGkJcjYscjYsMQorc2V0X3R3cjoKKwlhZGRpCXI2LHI2LC0xCS8qIFRzaTEwOCBTREMgYWx3YXlzIGdpdmVzIG9uZSBleHRyYSBjbG9jayAqLworCWxpCXI1LEVSUl9UV1JfRkFJTAorCWNtcGkJMCwwLHI2LDB4MDcJLyogbWF4IHN1cHBvcnRlZCB2YWx1ZSAqLworCWJndAlzcGRfZmFpbAorCXJsd2ltaQlyNyxyNiw1LDI0LDI2CisKKwlSRUFEX1NQRCg0MikJLyogR2V0IHRSRkMgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpCXI1LCBFUlJfVFJGQ19GQUlMCisJLyogVHNpMTA4IHNwZWM6IHRSRkM9KHRSRkMgKyAxKS8yICovCisJYWRkaQlyMyxyMywxCisJcmx3aW5tLglyMyxyMywzMSwxLDMxCS8qIGRpdmlkZSBieSAyICovCisJYmVxCXNwZF9mYWlsCisJZGl2d3UJcjYscjMscjkKKwltdWxsdwlyOCxyNixyOQorCXN1YmYuCXI4LHI4LHIzCisJYmVxCXNldF90cmZjCisJYWRkaQlyNixyNiwxCitzZXRfdHJmYzoKKwljbXBpCTAsMCxyNiwweDFGCS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3QJc3BkX2ZhaWwKKwlybHdpbWkJcjcscjYsMCwyNywzMQorCisJc3R3CXI3LFNEX1RJTUlORyhyNCkKKwlzeW5jCisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdHdvIHJlZ2lzdGVycyBhcmUgc2V0IG9uIHBlci1ESU1NIGJhc2lzLgorCSAqIFRoZSBTRF9SRUZSRVNIIGFuZCBTRF9USU1JTkcgc2V0dGluZ3MgYXJlIGNvbW1vbiBmb3IgYm90aCBESU1NUworCSAqLworCitkb19lYWNoX2RpbW06CisKKwkvKiBQcm9ncmFtIFNEUkFNIERJTU0gQ29udHJvbCBSZWdpc3RlciAqLworCisJbGkJcjcsIDAJCS8qIGNsZWFyIHI3IHByaW9yIHBhcmFtZXRlciBjb2xsZWN0aW9uICovCisKKwlSRUFEX1NQRCgxMykJCS8qIEdldCBQcmltYXJ5IFNEUkFNIFdpZHRoICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwljbXBpCTAsMCxyMyw0CS8qIENoZWNrIGZvciA0LWJpdCBTRFJBTSAqLworCWJlcQlkb19uYmFuaworCW9yaXMJcjcscjcsMHgwMDEwCS8qIFNldCBNRU1fV0lEVEggYml0ICovCisKK2RvX25iYW5rOgorCVJFQURfU1BEKDE3KQkJLyogR2V0IE51bWJlciBvZiBiYW5rcyBvbiBTRFJBTSBkZXZpY2UgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCS8qIEdyZW5kZWwgb25seSBkaXN0aW5ndWlzaCBiZXR3LiA0IG9yIDgtYmFuayBtZW1vcnkgcGFydHMgKi8KKwlsaQlyNSxFUlJfVU5LTk9XTl9QQVJUCS8qIG5vbi1zdXBwb3J0ZWQgbWVtb3J5IHBhcnQgKi8KKwljbXBpCTAsMCxyMyw0CisJYmVxCWRvX25yYW5rCisJY21waQkwLDAscjMsOAorCWJuZQlzcGRfZmFpbAorCW9yaQlyNyxyNywweDEwMDAKKworZG9fbnJhbms6CisJUkVBRF9TUEQoNSkJCS8qIEdldCAjIG9mIFJhbmtzICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSxFUlJfTlJBTktfSU5WQUxJRAorCWFuZGkuCXI2LHIzLDB4NwkvKiBVc2UgYml0cyBbMi4uMF0gb25seSAqLworCWJlcQlkb19hZGRyX21vZGUKKwljbXBpCTAsMCxyNiwxCisJYmd0CXNwZF9mYWlsCisJcmx3aW1pCXI3LHI2LDgsMjMsMjMKKworZG9fYWRkcl9tb2RlOgorCVJFQURfU1BEKDQpCQkvKiBHZXQgIyBvZiBDb2x1bW4gQWRkcmVzc2VzICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaQlyNSwgRVJSX0FERFJfTU9ERQorCWFuZGkuCXIzLHIzLDB4MGYJLyogY3V0IG9mZiByZXNlcnZlZCBiaXRzICovCisJY21waQkwLDAscjMsOAorCWJsZQlzcGRfZmFpbAorCWNtcGkJMCwwLHIzLDE1CisJYmd0CXNwZF9mYWlsCisJYWRkaQlyNixyMywtOAkvKiBjYWxjdWxhdGUgQUREUl9NT0RFIHBhcmFtZXRlciAqLworCXJsd2ltaQlyNyxyNiw0LDI0LDI3CS8qIHNldCBBRERSX01PREUgZmllbGQgKi8KKworc2V0X2RpbW1fY3RybDoKKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisJb3JpcwlyNyxyNywweDAwMDEJLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisJb3JpCXI3LHI3LDEJCS8qIHNldCBFTkFCTEUgYml0ICovCisJY21waQkwLDAscjEwLFNQRF9ESU1NMAorCWJuZQkxZgorCXN0dwlyNyxTRF9EMF9DVFJMKHI0KQorCXN5bmMKKwliCXNldF9kaW1tX2JhcgorMToKKwlzdHcJcjcsU0RfRDFfQ1RSTChyNCkKKwlzeW5jCisKKworCS8qIFByb2dyYW0gU0RSQU0gRElNTXggQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisKK3NldF9kaW1tX2JhcjoKKwlSRUFEX1NQRCg1KQkJLyogZ2V0ICMgb2YgUmFua3MgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWFuZGkuCXI3LHIzLDB4NworCWFkZGkJcjcscjcsMQorCVJFQURfU1BEKDMxKQkJLyogUmVhZCBESU1NIHJhbmsgZGVuc2l0eSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tCXI1LHIzLDI3LDI5LDMxCisJcmx3aW5tCXI2LHIzLDMsMjQsMjgKKwlvcglyNSxyNixyNQkvKiByNSA9IE5vcm1hbGl6ZWQgUmFuayBEZW5zaXR5IGJ5dGUgKi8KKwlsaXMJcjgsIDB4MDA4MAkvKiAxMjhNQiA+PiA0ICovCisJbXVsbHcJcjgscjgscjUJLyogcjggPSAocmFua19zaXplID4+IDQpICovCisJbXVsbHcJcjgscjgscjcJLyogcjggPSAoRElNTV9zaXplID4+IDQpICovCisJbmVnCXI3LHI4CisJcmx3aW5tCXI3LHI3LDI4LDQsMzEKKwlvcglyNyxyNyxyMTEJLyogc2V0IEFERFIgZmllbGQgKi8KKwlybHdpbm0JcjgscjgsMTIsMjAsMzEKKwlhZGQJcjExLHIxMSxyOAkvKiBzZXQgQmFzZSBBZGRyIGZvciBuZXh0IERJTU0gKi8KKworCWNtcGkJMCwwLHIxMCxTUERfRElNTTAKKwlibmUJc2V0X2RpbW0xX3NpemUKKwlzdHcJcjcsU0RfRDBfQkFSKHI0KQorCXN5bmMKKwlsaQlyMTAsU1BEX0RJTU0xCisJUkVBRF9TUEQoMCkKKwlibmUgZG9fZWFjaF9kaW1tCisJYiBzcGRfZG9uZQorCitzZXRfZGltbTFfc2l6ZToKKwlzdHcJcjcsU0RfRDFfQkFSKHI0KQorCXN5bmMKK3NwZF9kb25lOgorCWJscgorCitjaGVja19uZXh0X3Nsb3Q6CisJY21waQkwLDAscjEwLFNQRF9ESU1NMQorCWJlcQlzcGRfcmVhZF9mYWlsCisJbGkJcjEwLFNQRF9ESU1NMQorCWIJZG9fZmlyc3RfZGltbQorc3BkX3JlYWRfZmFpbDoKKwlvcmkJcjMscjAsMHhkZWFkCisJYgllcnJfaHVuZworc3BkX2ZhaWw6CisJbGkJcjMsMHgwYmFkCisJc3luYworZXJyX2h1bmc6CS8qIGhhbmcgaGVyZSBmb3IgZGVidWdnaW5nICovCisJbm9wCisJbm9wCisJYgllcnJfaHVuZworCisjZW5kaWYgLyogIVNEQ19IQVJEQ09ERURfSU5JVCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjNzQ0OGhwYzIvY29uZmlnLm1rIGIvYm9hcmQvbXBjNzQ0OGhwYzIvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTg4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9jb25maWcubWsKQEAgLTAsMCArMSwyOCBAQAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyBGbGFzaCBhZGRyZXNzCitURVhUX0JBU0UgPSAweEZGMDAwMDAwCisjIFJBTSBhZGRyZXNzCisjVEVYVF9CQVNFID0gMHgwMDQwMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMgLW1zb2Z0LWZsb2F0CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9tcGM3NDQ4aHBjMi5jIGIvYm9hcmQvbXBjNzQ0OGhwYzIvbXBjNzQ0OGhwYzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M5OWRlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvbXBjNzQ0OGhwYzIuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFJveSBaYW5nIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBtb2RpZmljYXRpb25zIGZvciB0aGUgVHNpMTA4IEVtdWwgQm9hcmQgYnkgYXZiQFR1bmRyYQorICovCisKKy8qCisgKiBib2FyZCBzdXBwb3J0L2luaXQgZnVuY3Rpb25zIGZvciB0aGUKKyAqIEZyZWVzY2FsZSBNUEM3NDQ4IEhQQzIgKEhpZ2gtUGVyZm9ybWFuY2UgQ29tcHV0aW5nIDIgUGxhdGZvcm0pLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDw3NHh4Xzd4eC5oPgorI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwICh2b2lkICpibG9iLCBiZF90ICpiZCk7CisjZW5kaWYKKworI3VuZGVmCURFQlVHCisKK2V4dGVybiB2b2lkIGZsdXNoX2RhdGFfY2FjaGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9sMV9pbnN0cnVjdGlvbl9jYWNoZSAodm9pZCk7CitleHRlcm4gdm9pZCB0c2kxMDhfaW5pdF9mICh2b2lkKTsKKworaW50IGRpc3BsYXlfbWVtX21hcCAodm9pZCk7CisKK3ZvaWQgYWZ0ZXJfcmVsb2MgKHVsb25nIGRlc3RfYWRkcikKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCS8qCisJICogSnVtcCB0byB0aGUgbWFpbiBVLUJvb3QgYm9hcmQgaW5pdCBjb2RlCisJICovCisJYm9hcmRfaW5pdF9yICgoZ2RfdCAqKSBnZCwgZGVzdF9hZGRyKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqIHJlcG9ydCBib2FyZCB0eXBlCisgKi8KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJaW50IGxfdHlwZSA9IDA7CisKKwlwcmludGYgKCJCT0FSRDogJXNcbiIsIENGR19CT0FSRF9OQU1FKTsKKwlyZXR1cm4gKGxfdHlwZSk7Cit9CisKKy8qCisgKiBSZWFkIFByb2Nlc3NvciBJRDoKKyAqCisgKiByZXBvcnQgY2FsbGluZyBwcm9jZXNzb3IgbnVtYmVyCisgKi8KKworaW50IHJlYWRfcGlkICh2b2lkKQoreworCXJldHVybiAwOwkJLyogd2UgYXJlIG9uIHNpbmdsZSBDUFUgcGxhdGZvcm0gZm9yIGEgd2hpbGUgKi8KK30KKworbG9uZyBpbnQgZHJhbV9zaXplIChpbnQgYm9hcmRfdHlwZSkKK3sKKwlyZXR1cm4gMHgyMDAwMDAwMDsJLyogMjU2TSBieXRlcyAqLworfQorCitsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisJcmV0dXJuIGRyYW1fc2l6ZSAoYm9hcmRfdHlwZSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZAorZnRfYm9hcmRfc2V0dXAgKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJZnRfY3B1X3NldHVwIChibG9iLCBiZCk7CisKKwlwID0gZnRfZ2V0X3Byb3AgKGJsb2IsICIvbWVtb3J5L3JlZyIsICZsZW4pOworCWlmIChwICE9IE5VTEwpIHsKKwkJKnArKyA9IGNwdV90b19iZTMyIChiZC0+YmlfbWVtc3RhcnQpOworCQkqcCA9IGNwdV90b19iZTMyIChiZC0+YmlfbWVtc2l6ZSk7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi90c2kxMDhfaW5pdC5jIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpAQCAtMCwwICsxLDY2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAoQykgQ29weXJpZ2h0IDIwMDM7ICBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZJTEVOQU1FOiB0c2kxMDhfaW5pdC5jCisgKgorICogT3JpZ2luYXRvcjogQWxleCBCb3VuaW5lCisgKgorICogREVTQ1JJUFRJT046CisgKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgVHVuZHJhIFRzaTEwOCBicmlkZ2UgY2hpcAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8NzR4eF83eHguaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHRzaTEwOC5oPgorCitleHRlcm4gdm9pZCBtcGljSW5pdCAoaW50IHZlcmJvc2UpOworCisvKgorICogQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVsb25nIHVwcGVyOworCXVsb25nIGxvd2VyOworfSBQQjJPQ05fTFVUX0VOVFJZOworCitQQjJPQ05fTFVUX0VOVFJZIHBiMm9jbl9sdXQxWzMyXSA9IHsKKwkvKiAwIC0gNyAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTAwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFMTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEUyMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTMwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNDAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEU1MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTYwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDggLSAxNSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVBMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUIwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFQzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVEMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUUwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFRjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDE2IC0gMjMgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYwMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjEwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGMjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYzMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjQwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGNTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEY2MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjcwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJLyogMjQgLSAzMSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEZBMDBfMDAwMCAtPiBQQ0kvWCAgUENJIEkvTyAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RkIwMF8wMDAwIC0+IFBDSS9YICBQQ0kgQ29uZmlnIChCeXRlLVN3YXApICovCisKKwl7MHgwMDAwMDAwMCwgMHgwMjAwMDI0MH0sIC8qIFBCQT0weEZDMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMTAwMDI0MH0sIC8qIFBCQT0weEZEMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMzAwMDI0MH0sIC8qIFBCQT0weEZFMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDI0MH0gIC8qIFBCQT0weEZGMDBfMDAwMCAtPiBITFAgOiAoVHJhbnNsYXRpb24gRW5hYmxlZCArIEJ5dGUtU3dhcCkqLworfTsKKworI2lmZGVmIENGR19DTEtfU1BSRUFECit0eXBlZGVmIHN0cnVjdCB7CisJdWxvbmcgY3RybDA7CisJdWxvbmcgY3RybDE7Cit9IFBMTF9DVFJMX1NFVDsKKworLyoKKyAqIENsb2NrIEdlbmVyYXRvciBTUExMMCBpbml0aWFsaXphdGlvbiB2YWx1ZXMKKyAqIFBMTDAgY29uZmlndXJhdGlvbiB0YWJsZSBmb3IgdmFyaW91cyBQQl9DTEtPIGZyZXEuCisgKiBVc2VzIHByZS1jYWxjdWxhdGVkIHZhbHVlcyBmb3IgRnMgPSAzMCBrSHosIEQgPSAwLjUlCisgKiBGb3V0IGRlcGVuZHMgb24gcmVxdWlyZWQgUEJfQ0xLTy4gQmFzZWQgb24gRnJlZiA9IDMzIE1IegorICovCisKK3N0YXRpYyBQTExfQ1RSTF9TRVQgcGxsMF9jb25maWdbOF0gPSB7CisJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAkvKiAwOiBieXBhc3MgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCS8qIDE6IHJlc2VydmVkICovCisJezB4MDA0MzAwNDQsIDB4MDAwMDAwNDN9LAkvKiAyOiBDR19QQl9DTEtPID0gMTgzIE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogMzogQ0dfUEJfQ0xLTyA9IDEwMCBNSHogKi8KKwl7MHgwMDVjMDA0NCwgMHgwMDAwMDAzOX0sCS8qIDQ6IENHX1BCX0NMS08gPSAxMzMgTUh6ICovCisJezB4MDA0YTAwNDQsIDB4MDAwMDAwNDB9LAkvKiA1OiBDR19QQl9DTEtPID0gMTY3IE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogNjogQ0dfUEJfQ0xLTyA9IDIwMCBNSHogKi8KKwl7MHgwMDRmMDA0NCwgMHgwMDAwMDAzZX0JLyogNzogQ0dfUEJfQ0xLTyA9IDIzMyBNSHogKi8KK307CisjZW5kaWYJLyogQ0ZHX0NMS19TUFJFQUQgKi8KKworLyoKKyAqIFByb3Nlc3NvciBCdXMgQ2xvY2sgKGluIE1IeikgZGVmaW5lZCBieSBDR19QQl9TRUxFQ1QKKyAqIChiYXNlZCBvbiByZWNvbW1lbmRlZCBUc2kxMDggcmVmZXJlbmNlIGNsb2NrIDMzTUh6KQorICovCitzdGF0aWMgaW50IHBiX2Nsa19zZWxbOF0gPSB7IDAsIDAsIDE4MywgMTAwLCAxMzMsIDE2NywgMjAwLCAyMzMgfTsKKworLyoKKyAqIGdldF9ib2FyZF9idXNfY2xrICgpCisgKgorICogcmV0dXJucyB0aGUgYnVzIGNsb2NrIGluIEh6LgorICovCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9idXNfY2xrICh2b2lkKQoreworCXVsb25nIGk7CisKKwkvKiBEZXRlY3QgUEIgY2xvY2sgZnJlcS4gKi8KKwlpID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUFdSVVBfU1RBVFVTKTsKKwlpID0gKGkgPj4gMTYpICYgMHgwNzsJLyogR2V0IFBCIFBMTCBtdWx0aXBsaWVyICovCisKKwlyZXR1cm4gcGJfY2xrX3NlbFtpXSAqIDEwMDAwMDA7Cit9CisKKy8qCisgKiBib2FyZF9lYXJseV9pbml0X2YgKCkKKyAqCisgKiBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBleGVjdXRlZCBmcm9tIGZsYXNoCisgKi8KKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwl1bG9uZyBpOworCisJZ2QtPm1lbV9jbGsgPSAwOworCWkgPSBpbjMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsKKwkJCUNHX1BXUlVQX1NUQVRVUyk7CisJaSA9IChpID4+IDIwKSAmIDB4MDc7CS8qIEdldCBHRCBQTEwgbXVsdGlwbGllciAqLworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoJLyogZXh0ZXJuYWwgY2xvY2sgKi8KKwkJcHJpbnRmICgiVXNpbmcgZXh0ZXJuYWwgY2xvY2tcbiIpOworCQlicmVhazsKKwljYXNlIDE6CS8qIHN5c3RlbSBjbG9jayAqLworCQlnZC0+bWVtX2NsayA9IGdkLT5idXNfY2xrOworCQlicmVhazsKKwljYXNlIDQ6CS8qIDEzMyBNSHogKi8KKwljYXNlIDU6CS8qIDE2NiBNSHogKi8KKwljYXNlIDY6CS8qIDIwMCBNSHogKi8KKwkJZ2QtPm1lbV9jbGsgPSBwYl9jbGtfc2VsW2ldICogMTAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiSW52YWxpZCBERFIyIGNsb2NrIHNldHRpbmdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXByaW50ZiAoIkJVUzogJWQgTUh6XG4iLCBnZXRfYm9hcmRfYnVzX2NsaygpIC8gMTAwMDAwMCk7CisJcHJpbnRmICgiTUVNOiAlZCBNSHpcbiIsIGdkLT5tZW1fY2xrIC8gMTAwMDAwMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBib2FyZF9lYXJseV9pbml0X3IoKSAtIFRzaTEwOCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBleGVjdXRlZCByaWdodCBhZnRlcgorICogcmVsb2NhdGlvbi4gQ29udGFpbnMgY29kZSB0aGF0IGNhbm5vdCBiZSBleGVjdXRlZCBmcm9tIGZsYXNoLgorICovCisKK2ludCBib2FyZF9lYXJseV9pbml0X3IgKHZvaWQpCit7CisJdWxvbmcgdGVtcCwgaTsKKwl1bG9uZyByZWdfdmFsOworCXZvbGF0aWxlIHVsb25nICpyZWdfcHRyOworCisJcmVnX3B0ciA9CisJCSh1bG9uZyAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgMHg5MDApOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IDB4MDAwMDAyMDE7CS8qIFNXQVAgRU5BQkxFRCAqLworCQkqcmVnX3B0cisrID0gMHgwMDsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVpZWlvIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBTZXR1cCBQQl9PQ05fQkFSMjogc2l6ZSAyNTZCICsgRU5hYmxlIEAgMHgwXzgwMDAwMDAwICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfT0NOX0JBUjIsCisJCTB4ODAwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogTWFrZSBzdXJlIHRoYXQgT0NOX0JBUjIgZGVjb2RlciBpcyBzZXQgKHRvIGFsbG93IGZvbGxvd2luZyBpbW1lZGlhdGUKKwkgKiByZWFkIGZyb20gU0RSQU0pCisJICovCisKKwl0ZW1wID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9PQ05fQkFSMik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKgorCSAqIFJlbWFwIFBCX09DTl9CQVIxIHRvIGFjY29tb2RhdGUgUENJLWJ1cyBhcGVydHVyZSBhbmQgRVBST00gaW50byB0aGUKKwkgKiBwcm9jZXNzb3IgYnVzIGFkZHJlc3Mgc3BhY2UuIEltbWVkaWF0ZWx5IGFmdGVyIHJlc2V0IExVVCBhbmQgYWRkcmVzcworCSAqIHRyYW5zbGF0aW9uIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBCQVIuIE5vdyB3ZSBoYXZlIHRvIGluaXRpYWxpemUgTFVUCisJICogYW5kIHN3aXRjaCBmcm9tIHRoZSBCT09UIG1vZGUgdG8gdGhlIG5vcm1hbCBvcGVyYXRpb24gbW9kZS4KKwkgKgorCSAqIFRoZSBhcGVydHVyZSBkZWZpbmVkIGJ5IFBCX09DTl9CQVIxIHN0YXJ0ZXMgYXQgYWRkcmVzcyAweEUwMDAwMDAwCisJICogYW5kIGNvdmVycyA1MTJNQiBvZiBhZGRyZXNzIHNwYWNlLiBUbyBhbGxvdyBsYXJnZXIgYXBlcnR1cmUgd2UgYWxzbworCSAqIGhhdmUgdG8gcmVsb2NhdGUgcmVnaXN0ZXIgd2luZG93IG9mIFRzaTEwOAorCSAqCisJICogSW5pdGlhbGl6ZSBMVVQgKDMyLWVudHJpZXMpIHByaW9yIHN3aXRjaGluZyBQQl9PQ05fQkFSMSBmcm9tIEJPT1QKKwkgKiBtb2RlLgorCSAqCisJICogaW5pdGlhbGl6ZSBwb2ludGVyIHRvIExVVCBhc3NvY2lhdGVkIHdpdGggUEJfT0NOX0JBUjEKKwkgKi8KKwlyZWdfcHRyID0KKwkJKHVsb25nICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyAweDgwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcGIyb2NuX2x1dDFbaV0ubG93ZXI7CisJCSpyZWdfcHRyKysgPSBwYjJvY25fbHV0MVtpXS51cHBlcjsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIEJhc2UgYWRkcmVzc2VzIGZvciBDUzAsIENTMSwgQ1MyLCBDUzMgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX0FERFIsCisJCTB4MDAwMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjFfQUREUiwKKwkJMHgwMDEwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMl9BRERSLAorCQkweDAwMjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX0FERFIsCisJCTB4MDAzMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogTWFza3MgZm9yIEhMUCBiYW5rcyAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjBfTUFTSywKKwkJMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMV9NQVNLLAorCQkweEZGRjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IyX01BU0ssCisJCTB4RkZGMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjNfTUFTSywKKwkJMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBTZXQgQ1RSTDAgdmFsdWVzIGZvciBiYW5rcyAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjBfQ1RSTDAsCisJCTB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjFfQ1RSTDAsCisJCTB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjJfQ1RSTDAsCisJCTB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjNfQ1RSTDAsCisJCTB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IGJhbmtzIHRvIGxhdGNoZWQgbW9kZSwgZW5hYmxlZCwgYW5kIG90aGVyIGRlZmF1bHQgc2V0dGluZ3MgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IxX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IyX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX0NUUkwxLAorCQkweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qCisJICogU2V0IG5ldyB2YWx1ZSBmb3IgUEJfT0NOX0JBUjE6IHN3aXRjaCBmcm9tIEJPT1QgdG8gTFVUIG1vZGUuCisJICogdmFsdWUgZm9yIFBCX09DTl9CQVIxOiAoQkEtMHhFMDAwXzAwMDAgKyBzaXplIDUxMk1CICsgRU5hYmxlKQorCSAqLworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9PQ05fQkFSMSwKKwkJMHhFMDAwMDAxMSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBPQ05fQkFSMiBkZWNvZGVyIGlzIHNldCAodG8gYWxsb3cgZm9sbG93aW5nCisJICogaW1tZWRpYXRlIHJlYWQgZnJvbSBTRFJBTSkKKwkgKi8KKworCXRlbXAgPSBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX09DTl9CQVIxKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qCisJICogU1JJOiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZW5hYmxlZCB0aGUgSExQIGJhbmtzLiBUaGF0IG1lYW5zIHdlIGNhbgorCSAqIG5vdyByZWFkIGZyb20gdGhlIE5WUkFNIGFuZCBpbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisJICogV2Ugd2lsbCBvdmVyLXJpZGUgdGhlIGVudl9pbml0IGNhbGxlZCBpbiBib2FyZF9pbml0X2YKKwkgKiBUaGlzIGlzIHJlYWxseSBhIHdvcmstYXJvdW5kIGJlY2F1c2UsIHRoZSBITFAgYmFuayAxCisJICogd2hlcmUgTlZSQU0gcmVzaWRlcyBpcyBub3QgdmlzaWJsZSBkdXJpbmcgYm9hcmRfaW5pdF9mCisJICogKGxpYl9wcGMvYm9hcmQuYykKKwkgKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCB1c2UgdGhlIEkyQyBFRVBST00gYXQgc3RhcnQtdXAgdG8gY29uZmlndXJlCisJICogYW5kIGVuYWJsZSBhbGwgSExQIGJhbmtzIGFuZCBub3QganVzdCBITFAgMCBhcyBpcyBiZWluZyBkb25lIGZvcgorCSAqIFRhaWdhIFJldi4gMi4KKwkgKi8KKworCWVudl9pbml0ICgpOworCisjaWZuZGVmIERJU0FCTEVfUEJNCisKKwkvKgorCSAqIEZvciBJQk0gcHJvY2Vzc29ycyB3ZSBoYXZlIHRvIHNldCBBZGRyZXNzLU9ubHkgY29tbWFuZHMgZ2VuZXJhdGVkCisJICogYnkgUEJNIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIG9uZXMgc2V0IGFmdGVyIHJlc2V0LgorCSAqLworCisJdGVtcCA9IGdldF9jcHVfdHlwZSAoKTsKKworCWlmICgoQ1BVXzc1MEZYID09IHRlbXApIHx8IChDUFVfNzUwR1ggPT0gdGVtcCkpCisJCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9NQ01ELAorCQkJMHgwMDAwOTk1NSk7CisjZW5kaWYJLyogRElTQUJMRV9QQk0gKi8KKworI2lmZGVmIENPTkZJR19QQ0kKKwkvKgorCSAqIEluaXRpYWxpemUgUENJL1ggYmxvY2sKKwkgKi8KKworCS8qIE1hcCBQQ0kvWCBDb25maWd1cmF0aW9uIFNwYWNlICgxNk1CIEAgMHgwX0ZFMDAwMDAwKSAqLworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsKKwkJUENJX1BGQUJfQkFSMF9VUFBFUiwgMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QRkFCX0JBUjAsCisJCTB4RkIwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IEJ1cyBOdW1iZXIgZm9yIHRoZSBhdHRhY2hlZCBQQ0kvWCBidXMgKHdlIHdpbGwgdXNlIDAgZm9yIE5CKSAqLworCisJdGVtcCA9CWluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QQ0lYX1NUQVQpOworCisJdGVtcCAmPSB+MHhGRjAwOwkvKiBDbGVhciB0aGUgQlVTX05VTSBmaWVsZCAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUENJWF9TVEFULAorCQl0ZW1wKTsKKworCS8qIE1hcCBQQ0kvWCBJTyBTcGFjZSAoNjRLQiBAIDB4MF9GRDAwMDAwMCkgdGFrZXMgb25lIDE2TUIgTFVUIGVudHJ5ICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QRkFCX0lPX1VQUEVSLAorCQkwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIFRoaXMgcmVnaXN0ZXIgaXMgb24gdGhlIFBDSSBzaWRlIHRvIGludGVycHJldCB0aGUgYWRkcmVzcyBpdCByZWNlaXZlcworCSAqIGFuZCBtYXBzIGl0IGFzIGEgSU8gYWRkcmVzcy4KKwkgKi8KKworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1BGQUJfSU8sCisJCTB4RkEwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyoKKwkgKiBNYXAgUENJL1ggTWVtb3J5IFNwYWNlCisJICoKKwkgKiBUcmFuc2FjdGlvbnMgZGlyZWN0ZWQgZnJvbSBPQ00gdG8gUENJIE1lbW9yeSBTcGFjZSBhcmUgZGlyZWN0ZWQKKwkgKiBmcm9tIFBCIHRvIFBDSQorCSAqIHVuY2hhbmdlZCAoYXMgZGVmaW5lZCBieSBQQl9PQ05fQkFSMSwyIGFuZCBMVVQgc2V0dGluZ3MpLgorCSAqIElmIGFkZHJlc3MgcmVtYXBwaW5nIGlzIHJlcXVpcmVkIHRoZSBjb3JyZXNwb25kaW5nIFBDSV9QRkFCX01FTTMyCisJICogYW5kIFBDSV9QRkFCX1BGTXggcmVnaXN0ZXIgZ3JvdXBzIGhhdmUgdG8gYmUgY29uZmlndXJlZC4KKwkgKgorCSAqIE1hcCB0aGUgcGF0aCBmcm9tIHRoZSBQQ0kvWCBidXMgaW50byB0aGUgc3lzdGVtIG1lbW9yeQorCSAqCisJICogVGhlIG1lbW9yeSBtYXBwZWQgd2luZG93IGFzc290aWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjIgcHJvdmlkZXMKKwkgKiBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBtZW1vcnkgd2l0aG91dCBhZGRyZXNzIHJlbWFwcGluZy4KKwkgKiBBbGwgc3lzdGVtIG1lbW9yeSBpcyBvcGVuZWQgZm9yIGFjY2Vzc2VzIGluaXRpYXRlZCBieSBQQ0kvWCBidXMKKwkgKiBtYXN0ZXJzLgorCSAqCisJICogSW5pdGlhbGl6ZSBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMgorCSAqCisJICogc2V0IHBvaW50ZXIgdG8gTFVUIGFzc29jaWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjIKKwkgKi8KKworCXJlZ19wdHIgPQorCQkodWxvbmcgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyAweDUwMCk7CisKKyNpZmRlZiBESVNBQkxFX1BCTQorCisJLyogSW4gY2FzZSB3aGVuIFBCTSBpcyBkaXNhYmxlZCAobm8gSFcgc3VwcG9ydGVkIGNhY2hlIHNub29wbmcgb24gUEIpCisJICogUDJPX0JBUjIgaXMgZGlyZWN0bHkgbWFwcGVkIGludG8gdGhlIHN5c3RlbSBtZW1vcnkgd2l0aG91dCBhZGRyZXNzCisJICogdHJhbnNsYXRpb24uCisJICovCisKKwlyZWdfdmFsID0gMHgwMDAwMDAwNDsJLyogU0RSQU0gcG9ydCArIE5PIEFkZHJfVHJhbnNsYXRpb24gKi8KKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCSpyZWdfcHRyKysgPSByZWdfdmFsOwkvKiBQMk9fQkFSMl9MVVR4ICovCisJCSpyZWdfcHRyKysgPSAwOwkJLyogUDJPX0JBUjJfTFVUX1VQUEVSeCAqLworCX0KKworCS8qIHZhbHVlIGZvciBQQ0kgQkFSMiAoc2l6ZSA9IDUxMk1CLCBFbmFibGVkLCBObyBBZGRyLiBUcmFuc2xhdGlvbikgKi8KKwlyZWdfdmFsID0gMHgwMDAwNzUwMDsKKyNlbHNlCisKKwlyZWdfdmFsID0gMHgwMDAwMDAwMjsJLyogRGVzdGluYXRpb24gcG9ydCA9IFBCTSAqLworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IHJlZ192YWw7CS8qIFAyT19CQVIyX0xVVHggKi8KKy8qIFAyT19CQVIyX0xVVF9VUFBFUnggOiBTZXQgZGF0YSBzd2FwcGluZyBtb2RlIGZvciBQQk0gKGJ5dGUgc3dhcHBpbmcpICovCisJCSpyZWdfcHRyKysgPSAweDQwMDAwMDAwOworLyogb2Zmc2V0ID0gMTZNQiwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBlbmFibGVkIHRvIGFsbG93IGJ5dGUgc3dhcHBpbmcgKi8KKwkJcmVnX3ZhbCArPSAweDAxMDAwMDAwOworCX0KKworLyogdmFsdWUgZm9yIFBDSSBCQVIyIChzaXplID0gNTEyTUIsIEVuYWJsZWQsIEFkZHJlc3MgVHJhbnNsYXRpb24gRW5hYmxlZCkgKi8KKwlyZWdfdmFsID0gMHgwMDAwNzEwMDsKKyNlbmRpZgorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlaWVpbyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX1BBR0VfU0laRVMsCisJCXJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IDY0LWJpdCBQQ0kgYnVzIGFkZHJlc3MgZm9yIHN5c3RlbSBtZW1vcnkKKwkgKiAoIDAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBlYXN5IG1hcHBpbmcpCisJICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMiwKKwkJMHgwMDAwMDAwMCk7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjJfVVBQRVIsCisJCTB4MDAwMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjaWZuZGVmIERJU0FCTEVfUEJNCisJLyoKKwkgKiAgVGhlIG1lbW9yeSBtYXBwZWQgd2luZG93IGFzc290aWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjMgcHJvdmlkZXMKKwkgKiAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0gbWVtb3J5IHVzaW5nIFNEUkFNIE9DTiBwb3J0IGFuZCBhZGRyZXNzCisJICogIHRyYW5zbGF0aW9uLiBUaGlzIGlzIGFsdGVybmF0aXZlIHdheSB0byBhY2Nlc3MgU0RSQU0gZnJvbSBQQ0kKKwkgKiAgcmVxdWlyZWQgZm9yIFRzaTEwOCBlbXVsYXRpb24gdGVzdGluZy4KKwkgKiAgQWxsIHN5c3RlbSBtZW1vcnkgaXMgb3BlbmVkIGZvciBhY2Nlc3NlcyBpbml0aWF0ZWQgYnkKKwkgKiAgUENJL1ggYnVzIG1hc3RlcnMuCisJICoKKwkgKiAgSW5pdGlhbGl6ZSBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMworCSAqCisJICogIHNldCBwb2ludGVyIHRvIExVVCBhc3NvY2lhdGVkIHdpdGggUENJIFAyT19CQVIzCisJICovCisJcmVnX3B0ciA9CisJCSh1bG9uZyAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIDB4NjAwKTsKKworCXJlZ192YWwgPSAweDAwMDAwMDA0OwkvKiBEZXN0aW5hdGlvbiBwb3J0ID0gU0RDICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcmVnX3ZhbDsJLyogUDJPX0JBUjNfTFVUeCAqLworCisvKiBQMk9fQkFSM19MVVRfVVBQRVJ4IDogU2V0IGRhdGEgc3dhcHBpbmcgbW9kZSBmb3IgUEJNIChieXRlIHN3YXBwaW5nKSAqLworCQkqcmVnX3B0cisrID0gMDsKKworLyogb2Zmc2V0ID0gMTZNQiwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBlbmFibGVkIHRvIGFsbG93IGJ5dGUgc3dhcHBpbmcgKi8KKwkJcmVnX3ZhbCArPSAweDAxMDAwMDAwOworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworCS8qIENvbmZpZ3VyZSBQQ0kgUDJPX0JBUjMgKHNpemUgPSA1MTJNQiwgRW5hYmxlZCkgKi8KKworCXJlZ192YWwgPQorCQlpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKworCQkgUENJX1AyT19QQUdFX1NJWkVTKTsKKwlyZWdfdmFsICY9IH4weDAwRkY7CisJcmVnX3ZhbCB8PSAweDAwNzE7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX1BBR0VfU0laRVMsCisJCXJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJLyogU2V0IDY0LWJpdCBiYXNlIFBDSSBidXMgYWRkcmVzcyBmb3Igd2luZG93ICgweDIwMDAwMDAwKSAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjNfVVBQRVIsCisJCTB4MDAwMDAwMDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1AyT19CQVIzLAorCQkweDIwMDAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKworI2VuZGlmCS8qICFESVNBQkxFX1BCTSAqLworCisjaWZkZWYgRU5BQkxFX1BDSV9DU1JfQkFSCisJLyogb3BlbiBpZiByZXF1aXJlZCBhY2Nlc3MgdG8gVHNpMTA4IENTUnMgZnJvbSB0aGUgUENJL1ggYnVzICovCisJLyogZW5hYmxlIEJBUjAgb24gdGhlIFBDSS9YIGJ1cyAqLworCXJlZ192YWwgPSBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQlUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfTUlTQ19DU1IpOworCXJlZ192YWwgfD0gMHgwMjsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9NSVNDX0NTUiwKKwkJcmVnX3ZhbCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMF9VUFBFUiwKKwkJMHgwMDAwMDAwMCk7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjAsCisJCUNGR19UU0kxMDhfQ1NSX0JBU0UpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjZW5kaWYKKworCS8qCisJICogRmluYWxseSBlbmFibGUgUENJL1ggQnVzIE1hc3RlciBhbmQgTWVtb3J5IFNwYWNlIGFjY2VzcworCSAqLworCisJcmVnX3ZhbCA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9DU1IpOworCXJlZ192YWwgfD0gMHgwNjsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9DU1IsIHJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLworCisJLyoKKwkgKiBJbml0aWFsaXplIE1QSUMgb3V0cHV0cyAoaW50ZXJydXB0IHBpbnMpOgorCSAqIEludGVycnVwdCByb3V0aW5nIG9uIHRoZSBHcmVuZGVsIEVtdWwuIEJvYXJkOgorCSAqIFBCX0lOVFswXSAtPiBJTlQgKENQVTApCisJICogUEJfSU5UWzFdIC0+IElOVCAoQ1BVMSkKKwkgKiBQQl9JTlRbMl0gLT4gTUNQIChDUFUwKQorCSAqIFBCX0lOVFszXSAtPiBNQ1AgKENQVTEpCisJICogU2V0IGludGVycnVwdCBjb250cm9sbGVyIG91dHB1dHMgYXMgTGV2ZWxfU2Vuc2l0aXZlL0FjdGl2ZV9Mb3cKKwkgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9NUElDX1JFR19PRkZTRVQgKyBNUElDX0NTUigwKSwgMHgwMik7CisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfTVBJQ19SRUdfT0ZGU0VUICsgTVBJQ19DU1IoMSksIDB4MDIpOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDIpLCAweDAyKTsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9NUElDX1JFR19PRkZTRVQgKyBNUElDX0NTUigzKSwgMHgwMik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IE1hY2hpbmUgQ2hlY2sgZXhjZXB0aW9uIGlzIGVuYWJsZWQKKwkgKiBXZSBuZWVkIGl0IHRvIHN1cHBvcnQgUENJIEJ1cyBwcm9iaW5nIChjb25maWd1cmF0aW9uIHJlYWRzKQorCSAqLworCisJcmVnX3ZhbCA9IG1mbXNyICgpOworCW10bXNyKHJlZ192YWwgfCBNU1JfTUUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOZWVkZWQgdG8gcHJpbnQgb3V0IEwyIGNhY2hlIGluZm8KKyAqIHVzZWQgaW4gdGhlIG1pc2NfaW5pdF9yIGZ1bmN0aW9uCisgKi8KKwordW5zaWduZWQgbG9uZyBnZXRfbDJjciAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGwyY29udHJvbHJlZzsKKwlhc20gdm9sYXRpbGUgKCJtZnNwciAlMCwgMTAxNyI6Ij1yIiAobDJjb250cm9scmVnKTopOworCXJldHVybiBsMmNvbnRyb2xyZWc7Cit9CisKKy8qCisgKiBtaXNjX2luaXRfcigpCisgKgorICogdmFyaW91cyB0aGluZ3MgdG8gZG8gYWZ0ZXIgcmVsb2NhdGlvbgorICoKKyAqLworCitpbnQgbWlzY19pbml0X3IgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisjaWZkZWYgQ0ZHX0NMS19TUFJFQUQJLyogSW5pdGlhbGl6ZSBTcHJlYWQtU3BlY3RydW0gQ2xvY2sgZ2VuZXJhdGlvbiAqLworCXVsb25nIGk7CisKKwkvKiBFbnN1cmUgdGhhdCBTcHJlYWQtU3BlY3RydW0gaXMgZGlzYWJsZWQgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsIDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMCwgMCk7CisKKwkvKiBJbml0aWFsaXplIFBMTDE6IENHX1BDSV9DTEsgLCBpbnRlcm5hbCBPQ05fQ0xLCisJICogVXNlcyBwcmUtY2FsY3VsYXRlZCB2YWx1ZSBmb3IgRm91dCA9IDgwMCBNSHosIEZzID0gMzAga0h6LCBEID0gMC41JQorCSAqLworCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfQ0xLX1JFR19PRkZTRVQgKyBDR19QTEwxX0NUUkwwLAorCQkweDAwMmUwMDQ0KTsJLyogRCA9IDAuMjUlICovCisJb3V0MzIgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfQ0xLX1JFR19PRkZTRVQgKyBDR19QTEwxX0NUUkwxLAorCQkweDAwMDAwMDM5KTsJLyogQldBREogKi8KKworCS8qIEluaXRpYWxpemUgUExMMDogQ0dfUEJfQ0xLTyAgKi8KKwkvKiBEZXRlY3QgUEIgY2xvY2sgZnJlcS4gKi8KKwlpID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUFdSVVBfU1RBVFVTKTsKKwlpID0gKGkgPj4gMTYpICYgMHgwNzsJLyogR2V0IFBCIFBMTCBtdWx0aXBsaWVyICovCisKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsIHBsbDBfY29uZmlnW2ldLmN0cmwwKTsKKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDEsIHBsbDBfY29uZmlnW2ldLmN0cmwxKTsKKworCS8qIFdhaXQgYW5kIHNldCBTU0VOIGZvciBib3RoIFBMTDAgYW5kIDEgKi8KKwl1ZGVsYXkgKDEwMDApOworCW91dDMyIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMCwKKwkJMHg4MDJlMDA0NCk7CS8qIEQ9MC4yNSUgKi8KKwlvdXQzMiAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCVRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDAsCisJIAkweDgwMDAwMDAwIHwgcGxsMF9jb25maWdbaV0uY3RybDApOworI2VuZGlmCS8qIENGR19DTEtfU1BSRUFEICovCisKKyNpZmRlZiBDRkdfTDIKKwlsMmNhY2hlX2VuYWJsZSAoKTsKKyNlbmRpZgorCXByaW50ZiAoIkJVUzogICAlZCBNSHpcbiIsIGdkLT5idXNfY2xrIC8gMTAwMDAwMCk7CisJcHJpbnRmICgiTUVNOiAgICVkIE1IelxuIiwgZ2QtPm1lbV9jbGsgLyAxMDAwMDAwKTsKKworCS8qCisJICogQWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcHJpbnQgdGhlIGNhY2hlIGRldGFpbHMgaXMgYXZhaWJsYWJsZQorCSAqIGF0IHRoaXMgcG9pbnQgaS5lLiBhYm92ZSBjYWxsIHRvIGwyY2FjaGVfZW5hYmxlIGlzIHRoZSB2ZXJ5IGxhc3QKKwkgKiB0aGluZyBkb25lIHdpdGggcmVnYXJkcyB0byBlbmFibGluZyBkaWFibGluZyB0aGUgY2FjaGUuCisJICogU28gdGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBwcmludCBhbGwgdGhpcyBpbmZvcm1hdGlvbgorCSAqLworCisJcHJpbnRmICgiQ0FDSEU6ICIpOworCXN3aXRjaCAoZ2V0X2NwdV90eXBlKCkpIHsKKwljYXNlIENQVV83NDQ3QToKKwkJcHJpbnRmICgiTDEgSW5zdHJ1Y3Rpb24gY2FjaGUgLSAzMktCIDgtd2F5Iik7CisJCShnZXRfaGlkMCAoKSAmICgxIDw8IDE1KSkgPyBwcmludGYgKCIgRU5BQkxFRFxuIikgOgorCQkJcHJpbnRmICgiIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRmICgiTDEgRGF0YSBjYWNoZSAtIDMyS0IgOC13YXkiKTsKKwkJKGdldF9oaWQwICgpICYgKDEgPDwgMTQpKSA/IHByaW50ZiAoIiBFTkFCTEVEXG4iKSA6CisJCQlwcmludGYgKCIgRElTQUJMRURcbiIpOworCQlwcmludGYgKCJVbmlmaWVkIEwyIGNhY2hlIC0gNTEyS0IgOC13YXkiKTsKKwkJKGdldF9sMmNyICgpICYgKDEgPDwgMzEpKSA/IHByaW50ZiAoIiBFTkFCTEVEXG4iKSA6CisJCQlwcmludGYgKCIgRElTQUJMRURcbiIpOworCQlwcmludGYgKCJcbiIpOworCQlicmVhazsKKworCWNhc2UgQ1BVXzc0NDg6CisJCXByaW50ZiAoIkwxIEluc3RydWN0aW9uIGNhY2hlIC0gMzJLQiA4LXdheSIpOworCQkoZ2V0X2hpZDAgKCkgJiAoMSA8PCAxNSkpID8gcHJpbnRmICgiIEVOQUJMRURcbiIpIDoKKwkJCXByaW50ZiAoIiBESVNBQkxFRFxuIik7CisJCXByaW50ZiAoIkwxIERhdGEgY2FjaGUgLSAzMktCIDgtd2F5Iik7CisJCShnZXRfaGlkMCAoKSAmICgxIDw8IDE0KSkgPyBwcmludGYgKCIgRU5BQkxFRFxuIikgOgorCQkJcHJpbnRmICgiIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRmICgiVW5pZmllZCBMMiBjYWNoZSAtIDFNQiA4LXdheSIpOworCQkoZ2V0X2wyY3IgKCkgJiAoMSA8PCAzMSkpID8gcHJpbnRmICgiIEVOQUJMRURcbiIpIDoKKwkJCXByaW50ZiAoIiBESVNBQkxFRFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzc0NDhocGMyL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjQyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBKb3NoIEh1YmVyIDxodWJlckBtY2x4LmNvbT4sIE1pc3Npb24gQ3JpdGljYWwgTGludXgsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogdS1ib290LmxkcyAtIGxpbmtlciBzY3JpcHQgZm9yIFUtQm9vdCBvbiBtcGM3NDQ4aHBjMiBCb2FyZC4KKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIGNwdS83NHh4Xzd4eC9zdGFydC5vCSgudGV4dCkKKworLyogc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGEgc2VwZXJhdGUgc2VjdG9yIGluIHRoZSBib290IGZsYXNoICovCisvKiAgICAuID0gZW52X29mZnNldDsgKi8KKy8qICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vKC50ZXh0KSAqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvY3B1LmMgYi9jcHUvNzR4eF83eHgvY3B1LmMKaW5kZXggZjRlNWZjNS4uOWM4OTk4YiAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L2NwdS5jCisrKyBiL2NwdS83NHh4Xzd4eC9jcHUuYwpAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlIDw3NHh4Xzd4eC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQorI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKICNpbmNsdWRlICIuLi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpYTY4Ni5oIgogI2luY2x1ZGUgIi4uL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uaCIKQEAgLTEwMSw2ICsxMDUsMTAgQEAKIAkJdHlwZSA9IENQVV83NDU3OwogCQlicmVhazsKIAorCWNhc2UgMHg4MDAzOgorCQl0eXBlID0gQ1BVXzc0NDdBOworCQlicmVhazsKKwogCWNhc2UgMHg4MDA0OgogCQl0eXBlID0gQ1BVXzc0NDg7CiAJCWJyZWFrOwpAQCAtMTU2LDYgKzE2NCwxMCBAQAogCQlzdHIgPSAiTVBDNzQxMCI7CiAJCWJyZWFrOwogCisJY2FzZSBDUFVfNzQ0N0E6CisJCXN0ciA9ICJNUEM3NDQ3QSI7CisJCWJyZWFrOworCiAJY2FzZSBDUFVfNzQ0ODoKIAkJc3RyID0gIk1QQzc0NDgiOwogCQlicmVhazsKQEAgLTI2NCwyMCArMjc2LDE5IEBACiAvKgogICogRm9yIHRoZSA3NDAwIHRoZSBUQiBjbG9jayBydW5zIGF0IDEvNCB0aGUgY3B1IGJ1cyBzcGVlZC4KICAqLwotI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKKyNpZiBkZWZpbmVkKENPTkZJR19BTUlHQU9ORUczU0UpIHx8IGRlZmluZWQoQ0ZHX0NPTkZJR19CVVNfQ0xLKQogdW5zaWduZWQgbG9uZyBnZXRfdGJjbGsodm9pZCkKIHsKIAlyZXR1cm4gKGdkLT5idXNfY2xrIC8gNCk7CiB9Ci0jZWxzZQkvKiAhIENPTkZJR19BTUlHQU9ORUczU0UgKi8KKyNlbHNlCS8qICEgQ09ORklHX0FNSUdBT05FRzNTRSBhbmQgIUNGR19DT05GSUdfQlVTX0NMSyovCiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrICh2b2lkKQogewogCXJldHVybiBDRkdfQlVTX0haIC8gNDsKIH0KLSNlbmRpZgkvKiBDT05GSUdfQU1JR0FPTkVHM1NFICovCisjZW5kaWYJLyogQ09ORklHX0FNSUdBT05FRzNTRSBvciBDRkdfQ09ORklHX0JVU19DTEsqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCiAjaWYgIWRlZmluZWQoQ09ORklHX1BDSVBQQzIpICYmICFkZWZpbmVkKENPTkZJR19CQUI3eHgpCiB2b2lkCkBAIC0yODgsNCArMjk5LDMxIEBACiAjZW5kaWYgIC8qICFDT05GSUdfUENJUFBDMiAmJiAhQ09ORklHX0JBQjd4eCAqLwogI2VuZGlmCS8qIENPTkZJR19XQVRDSERPRyAqLwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfT0ZfRkxBVF9UUkVFCit2b2lkCitmdF9jcHVfc2V0dXAgKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwl1bG9uZyBjbG9jazsKKwlpbnQgbGVuOworCisJY2xvY2sgPSBiZC0+YmlfYnVzZnJlcTsKKworCXAgPSBmdF9nZXRfcHJvcCAoYmxvYiwgIi9jcHVzLyIgT0ZfQ1BVICIvYnVzLWZyZXF1ZW5jeSIsICZsZW4pOworCWlmIChwICE9IE5VTEwpCisJCSpwID0gY3B1X3RvX2JlMzIgKGNsb2NrKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEgpCisJcCA9IGZ0X2dldF9wcm9wIChibG9iLCAiLyIgT0ZfVFNJICIvZXRoZXJuZXRANjIwMC9hZGRyZXNzIiwgJmxlbik7CisJCW1lbWNweSAocCwgYmQtPmJpX2VuZXRhZGRyLCA2KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0VUSDEpCisJcCA9IGZ0X2dldF9wcm9wIChibG9iLCAiLyIgT0ZfVFNJICIvZXRoZXJuZXRANjYwMC9hZGRyZXNzIiwgJmxlbik7CisJCW1lbWNweSAocCwgYmQtPmJpX2VuZXQxYWRkciwgNik7CisjZW5kaWYKK30KKyNlbmRpZgogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvY3B1Lzc0eHhfN3h4L2NwdV9pbml0LmMgYi9jcHUvNzR4eF83eHgvY3B1X2luaXQuYwppbmRleCBlMDJhNGNjLi4xZGQxYjJjIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvY3B1X2luaXQuYworKysgYi9jcHUvNzR4eF83eHgvY3B1X2luaXQuYwpAQCAtNDMsNiArNDMsNyBAQAogCWNhc2UgQ1BVXzc0NTA6CiAJY2FzZSBDUFVfNzQ1NToKIAljYXNlIENQVV83NDU3OgorCWNhc2UgQ1BVXzc0NDdBOgogCWNhc2UgQ1BVXzc0NDg6CiAJCS8qIGVuYWJsZSB0aGUgdGltZWJhc2UgYml0IGluIEhJRDAgKi8KIAkJc2V0X2hpZDAoZ2V0X2hpZDAoKSB8IDB4NDAwMDAwMCk7CmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvc3BlZWQuYyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCmluZGV4IGQxODAwZWQuLmQ4YzQwY2UgMTAwNjQ0Ci0tLSBhL2NwdS83NHh4Xzd4eC9zcGVlZC5jCisrKyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCkBAIC0zMSw2ICszMSw4IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfYm9hcmRfYnVzX2NsayAodm9pZCk7CisKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9tdWx0aXBsaWVyc194XzEwW10gPSB7CiAJMjUsCS8qIDAwMDAgLSAyLjV4ICovCiAJNzUsCS8qIDAwMDEgLSA3LjV4ICovCkBAIC01MCw2ICs1Miw0MiBAQAogCTAJLyogMTExMSAtIG9mZiAqLwogfTsKIAorLyogUExMX0NGR1swOjRdIHRhYmxlIGZvciBjcHUgNzQ0OC83NDQ3QS83NDU1Lzc0NTcgKi8KK3N0YXRpYyBjb25zdCBpbnQgaGlkMV83NHh4X211bHRpcGxpZXJzX3hfMTBbXSA9IHsKKwkxMTUsCS8qIDAwMDAwIC0gMTEuNXggICovCisJMTcwLAkvKiAwMDAwMSAtIDE3eCAgICAqLworCTc1LAkvKiAwMDAxMCAtICA3LjV4ICAqLworCTE1MCwJLyogMDAwMTEgLSAxNXggICAgKi8KKwk3MCwJLyogMDAxMDAgLSAgN3ggICAgKi8KKwkxODAsCS8qIDAwMTAxIC0gMTh4ICAgICovCisJMTAsCS8qIDAwMTEwIC0gYnlwYXNzICovCisJMjAwLAkvKiAwMDExMSAtIDIweCAgICAqLworCTIwLAkvKiAwMTAwMCAtICAyeCAgICAqLworCTIxMCwJLyogMDEwMDEgLSAyMXggICAgKi8KKwk2NSwJLyogMDEwMTAgLSAgNi41eCAgKi8KKwkxMzAsCS8qIDAxMDExIC0gMTN4ICAgICovCisJODUsCS8qIDAxMTAwIC0gIDguNXggICovCisJMjQwLAkvKiAwMTEwMSAtIDI0eCAgICAqLworCTk1LAkvKiAwMTExMCAtICA5LjV4ICAqLworCTkwLAkvKiAwMTExMSAtICA5eCAgICAqLworCTMwLAkvKiAxMDAwMCAtICAzeCAgICAqLworCTEwNSwJLyogMTAwMDEgLSAxMC41eCAgKi8KKwk1NSwJLyogMTAwMTAgLSAgNS41eCAgKi8KKwkxMTAsCS8qIDEwMDExIC0gMTF4ICAgICovCisJNDAsCS8qIDEwMTAwIC0gIDR4ICAgICovCisJMTAwLAkvKiAxMDEwMSAtIDEweCAgICAqLworCTUwLAkvKiAxMDExMCAtICA1eCAgICAqLworCTEyMCwJLyogMTAxMTEgLSAxMnggICAgKi8KKwk4MCwJLyogMTEwMDAgLSAgOHggICAgKi8KKwkxNDAsCS8qIDExMDAxIC0gMTR4ICAgICovCisJNjAsCS8qIDExMDEwIC0gIDZ4ICAgICovCisJMTYwLAkvKiAxMTAxMSAtIDE2eCAgICAqLworCTEzNSwJLyogMTExMDAgLSAxMy41eCAgKi8KKwkyODAsCS8qIDExMTAxIC0gMjh4ICAgICovCisJMCwJLyogMTExMTAgLSBvZmYgICAgKi8KKwkxMjUJLyogMTExMTEgLSAxMi41eCAgKi8KK307CisKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW10gPSB7CiAJMDAsCS8qIDAwMDAgLSBvZmYgKi8KIAkwMCwJLyogMDAwMSAtIG9mZiAqLwpAQCAtODksMjIgKzEyNywzMCBAQAogewogCXVsb25nIGNsb2NrID0gMDsKIAorI2lmZGVmIENGR19CVVNfQ0xLCisJZ2QtPmJ1c19jbGsgPSBDRkdfQlVTX0NMSzsJLyogYnVzIGNsb2NrIGlzIGEgZml4ZWQgZnJlcXVlbmN5ICovCisjZWxzZQorCWdkLT5idXNfY2xrID0gZ2V0X2JvYXJkX2J1c19jbGsgKCk7CS8qIGJ1cyBjbG9jayBpcyBjb25maWd1cmFibGUgKi8KKyNlbmRpZgorCiAJLyogY2FsY3VsYXRlIHRoZSBjbG9jayBmcmVxdWVuY3kgYmFzZWQgdXBvbiB0aGUgQ1BVIHR5cGUgKi8KIAlzd2l0Y2ggKGdldF9jcHVfdHlwZSgpKSB7CisJY2FzZSBDUFVfNzQ0N0E6CiAJY2FzZSBDUFVfNzQ0ODoKIAljYXNlIENQVV83NDU1OgogCWNhc2UgQ1BVXzc0NTc6CiAJCS8qCi0JCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgUExMX0VYVCBsaW5lIGlzIHplcm8uCiAJCSAqIE1ha2Ugc3VyZSBkaXZpc2lvbiBpcyBkb25lIGJlZm9yZSBtdWx0aXBsaWNhdGlvbiB0byBwcmV2ZW50IDMyLWJpdAogCQkgKiBhcml0aG1ldGljIG92ZXJmbG93cyB3aGljaCB3aWxsIGNhdXNlIGEgbmVnYXRpdmUgbnVtYmVyCiAJCSAqLwotCQljbG9jayA9IChDRkdfQlVTX0NMSyAvIDEwKSAqIGhpZDFfbXVsdGlwbGllcnNfeF8xMFsoZ2V0X2hpZDEgKCkgPj4gMTMpICYgMHhGXTsKKwkJY2xvY2sgPSAoZ2QtPmJ1c19jbGsgLyAxMCkgKgorCQkJaGlkMV83NHh4X211bHRpcGxpZXJzX3hfMTBbKGdldF9oaWQxICgpID4+IDEyKSAmIDB4MUZdOwogCQlicmVhazsKIAogCWNhc2UgQ1BVXzc1MEdYOgogCWNhc2UgQ1BVXzc1MEZYOgotCQljbG9jayA9IENGR19CVVNfQ0xLICogaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW2dldF9oaWQxICgpID4+IDI3XSAvIDEwOworCQljbG9jayA9IGdkLT5idXNfY2xrICoKKwkJCWhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyN10gLyAxMDsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV83NDUwOgpAQCAtMTIxLDcgKzE2Nyw4IEBACiAJCSAqIE1ha2Ugc3VyZSBkaXZpc2lvbiBpcyBkb25lIGJlZm9yZSBtdWx0aXBsaWNhdGlvbiB0byBwcmV2ZW50IDMyLWJpdAogCQkgKiBhcml0aG1ldGljIG92ZXJmbG93cyB3aGljaCB3aWxsIGNhdXNlIGEgbmVnYXRpdmUgbnVtYmVyCiAJCSAqLwotCQljbG9jayA9IChDRkdfQlVTX0NMSyAvIDEwKSAqIGhpZDFfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyOF07CisJCWNsb2NrID0gKGdkLT5idXNfY2xrIC8gMTApICoKKwkJCWhpZDFfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyOF07CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfVU5LTk9XTjoKQEAgLTEzMSw3ICsxNzgsNiBAQAogCX0KIAogCWdkLT5jcHVfY2xrID0gY2xvY2s7Ci0JZ2QtPmJ1c19jbGsgPSBDRkdfQlVTX0NMSzsKIAogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jIGIvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYwppbmRleCA4M2M5OTExLi5kNzE3N2M5IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jCisrKyBiL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKQEAgLTExMDksNyArMTEwOSw3IEBACiAJCQkJbW9kdDMgPSAweDAwMDAwMDAwOwogCQkJfQogCQl9Ci0gIAl9IGVsc2UgeworCX0gZWxzZSB7CiAJCWNvZHQgfD0gU0RSQU1fQ09EVF9EUVNfMl81X1ZfRERSMTsKIAkJbW9kdDAgPSAweDAwMDAwMDAwOwogCQltb2R0MSA9IDB4MDAwMDAwMDA7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3N0YXJ0LlMgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKaW5kZXggNTRiZTM3Yy4uMDcyYTZkMSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zdGFydC5TCisrKyBiL2NwdS9wcGM0eHgvc3RhcnQuUwpAQCAtMTg1OCwxMSArMTg1OCwxMSBAQAogI2VuZGlmIC8qIENPTkZJR180MDVFUCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotI2RlZmluZSBmdW5jdGlvbl9wcm9sb2coZnVuY19uYW1lKSAgICAgIC50ZXh0OyBcCisjZGVmaW5lIGZ1bmN0aW9uX3Byb2xvZyhmdW5jX25hbWUpCS50ZXh0OyBcCiAJCQkJCS5hbGlnbiAyOyBcCiAJCQkJCS5nbG9ibCBmdW5jX25hbWU7IFwKIAkJCQkJZnVuY19uYW1lOgotI2RlZmluZSBmdW5jdGlvbl9lcGlsb2coZnVuY19uYW1lKSAgICAgIC50eXBlIGZ1bmNfbmFtZSxAZnVuY3Rpb247IFwKKyNkZWZpbmUgZnVuY3Rpb25fZXBpbG9nKGZ1bmNfbmFtZSkJLnR5cGUgZnVuY19uYW1lLEBmdW5jdGlvbjsgXAogCQkJCQkuc2l6ZSBmdW5jX25hbWUsLi1mdW5jX25hbWUKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTkxOCwxMyArMTkxOCwxMyBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCWZ1bmN0aW9uX3Byb2xvZyhkY2J6X2FyZWEpCiAJcmx3aW5tLiByNSxyNCwwLDI3LDMxCi0Jcmx3aW5tICByNSxyNCwyNyw1LDMxCi0JYmVxICAgICAuLmRfcmEyCi0JYWRkaSAgICByNSxyNSwweDAwMDEKLS4uZF9yYTI6bXRjdHIgICByNQotLi5kX2FnMjpkY2J6ICAgIHIwLHIzCi0JYWRkaSAgICByMyxyMywzMgotCWJkbnogICAgLi5kX2FnMgorCXJsd2lubQlyNSxyNCwyNyw1LDMxCisJYmVxCS4uZF9yYTIKKwlhZGRpCXI1LHI1LDB4MDAwMQorLi5kX3JhMjptdGN0cglyNQorLi5kX2FnMjpkY2J6CXIwLHIzCisJYWRkaQlyMyxyMywzMgorCWJkbnoJLi5kX2FnMgogCXN5bmMKIAlibHIKIAlmdW5jdGlvbl9lcGlsb2coZGNiel9hcmVhKQpAQCAtMTkzMywyNiArMTkzMywyNiBAQAogfCBkZmx1c2guICBBc3N1bWUgMzJLIGF0IHZlY3RvciBhZGRyZXNzIGlzIGNhY2hhYmxlLgogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCWZ1bmN0aW9uX3Byb2xvZyhkZmx1c2gpCi0JbWZtc3IgICByOQotCXJsd2lubSAgcjgscjksMCwxNSwxMwotCXJsd2lubSAgcjgscjgsMCwxNywxNQotCW10bXNyICAgcjgKLQlhZGRpICAgIHIzLHIwLDB4MDAwMAotCW10c3ByICAgZHZsaW0scjMKLQltZnNwciAgIHIzLGl2cHIKLQlhZGRpICAgIHI0LHIwLDEwMjQKLQltdGN0ciAgIHI0CisJbWZtc3IJcjkKKwlybHdpbm0JcjgscjksMCwxNSwxMworCXJsd2lubQlyOCxyOCwwLDE3LDE1CisJbXRtc3IJcjgKKwlhZGRpCXIzLHIwLDB4MDAwMAorCW10c3ByCWR2bGltLHIzCisJbWZzcHIJcjMsaXZwcgorCWFkZGkJcjQscjAsMTAyNAorCW10Y3RyCXI0CiAuLmRmbHVzaF9sb29wOgotCWx3eiAgICAgcjYsMHgwKHIzKQotCWFkZGkgICAgcjMscjMsMzIKLQliZG56ICAgIC4uZGZsdXNoX2xvb3AKLQlhZGRpICAgIHIzLHIzLC0zMgotCW10Y3RyICAgcjQKLS4uYWc6ICAgZGNiZiAgICByMCxyMwotCWFkZGkgICAgcjMscjMsLTMyCi0JYmRueiAgICAuLmFnCisJbHd6CXI2LDB4MChyMykKKwlhZGRpCXIzLHIzLDMyCisJYmRuegkuLmRmbHVzaF9sb29wCisJYWRkaQlyMyxyMywtMzIKKwltdGN0cglyNAorLi5hZzoJZGNiZglyMCxyMworCWFkZGkJcjMscjMsLTMyCisJYmRuegkuLmFnCiAJc3luYwotCW10bXNyICAgcjkKKwltdG1zcglyOQogCWJscgogCWZ1bmN0aW9uX2VwaWxvZyhkZmx1c2gpCiAjZW5kaWYgLyogQ09ORklHXzQ0MCAqLwpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5tcGM3NDQ4aHBjMiBiL2RvYy9SRUFETUUubXBjNzQ0OGhwYzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1OWU4MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUubXBjNzQ0OGhwYzIKQEAgLTAsMCArMSwxODQgQEAKK0ZyZWVzY2FsZSBNUEM3NDQ4aHBjMiAoVGFpZ2EpIGJvYXJkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDcmVhdGVkIDA4LzExLzIwMDYgUm95IFphbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNUEM3NDQ4aHBjMiAoVGFpZ2EpIGJvYXJkIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBQb3dlclBDIHNlcnZlciByZWZlcmVuY2UKK2Rlc2lnbiwgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBoaWdoIHNwZWVkIHRocm91Z2hwdXQgYmV0d2VlbiB0aGUgcHJvY2Vzc29yIGFuZAordGhlIG1lbW9yeSwgZGlzayBkcml2ZSBhbmQgRXRoZXJuZXQgcG9ydCBzdWJzeXN0ZW1zLgorCitNUEM3NDQ4aHBjMihUYWlnYSkgaXMgZGVzaWduZWQgdG8gdGhlIG1pY3JvLUFUWCBjaGFzc2lzLCBhbGxvd2luZyBpdCB0byBiZQordXNlZCBpbiAxVSBvciAyVSByYWNrLW1vdW50IGNoYXNzaXOhrywgYXMgd2VsbCBhcyBpbiBzdGFuZGFyZCBBVFgvTWljcm8tQVRYCitjaGFzc2lzLgorCitCdWlsZGluZyBVLUJvb3QKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIG1wYzc0NDhocGMyIGNvZGUgYmFzZSBpcyBrbm93biB0byBjb21waWxlIHVzaW5nOgorCUJpbnV0aWxzIDIuMTUsIEdjYyAzLjQuMywgR2xpYmMgMi4zLjMKKworCSQgbWFrZSBtcGM3NDQ4aHBjMl9jb25maWcKKwlDb25maWd1cmluZyBmb3IgbXBjNzQ0OGhwYzIgYm9hcmQuLi4KKworCSQgbWFrZQorCitNZW1vcnkgTWFwCistLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgbWFwIGlzIHNldHVwIGZvciBMaW51eCB0byBvcGVyYXRlIHByb3Blcmx5LgorCitUaGUgbWFwcGluZyBpczoKKworCVJhbmdlIFN0YXJ0CVJhbmdlIEVuZAlEZWZpbml0aW9uCQkJU2l6ZQorCisJMHgwMDAwXzAwMDAJMHg3ZmZmX2ZmZmYJRERSCQkJCTJHCisJMHhlMDAwXzAwMDAJMHhlN2ZmX2ZmZmYJUENJIE1lbW9yeQkJCTEyOE0KKwkweGZhMDBfMDAwMAkweGZhZmZfZmZmZglQQ0kgSU8JCQkJMTZNCisJMHhmYjAwXzAwMDAJMHhmYmZmX2ZmZmYJUENJIENvbmZpZwkJCTE2TQorCTB4ZmMwMF8wMDAwCTB4ZmMwZl9mZmZmCU5WUkFNL0NBRE1VUwkJCTFNCisJMHhmZTAwXzAwMDAJMHhmZWZmX2ZmZmYJUHJvbUpldAkJCQkxNk0KKwkweGZmMDBfMDAwMAkweGZmODBfMDAwMAlGTEFTSCAoYm9vdCBmbGFzaCkJCThNCisJMHhmZjgwXzAwMDAJMHhmZmZmX2ZmZmYJRkxBU0ggKHNlY29uZCBoYWxmIGZsYXNoKQk4TQorCitVc2luZyBGbGFzaAorLS0tLS0tLS0tLS0KKworVGhlIE1QQzc0NDhocGMyIGJvYXJkIGhhcyB0d28gImJhbmtzIiBvZiBmbGFzaCwgZWFjaCA4TUIgaW4gc2l6ZQorKDJeMjMgPSAweDAwODAwMDAwKS4KKworTm90ZTogdGhlICJiYW5rIiBoZXJlIHJlZmVycyB0byBoYWxmIG9mIHRoZSBmbGFzaC4gSW4gZmFjdCwgdGhlcmUgaXMgb25seSBvbmUKK2Jhbmsgb2YgZmxhc2gsIHdoaWNoIGlzIGRpdmlkZWQgaW50byBsb3cgYW5kIGhpZ2ggaGFsZi4gRWFjaCBpcyBjb250cm9sbGVkIGJ5Cit0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGFkZHJlc3MgYnVzLiBUaGUgc28gY2FsbGVkICJiYW5rIiBpcyBvbmx5IGZvcgorY29udmVuaWVuY2UuCisKK1RoZXJlIGlzIGEgc3dpdGNoIHdoaWNoIGFsbG93cyB0aGUgImJhbmsiIHRvIGJlIHNlbGVjdGVkLiAgVGhlIHN3aXRjaAorc2V0dGluZ3MgZm9yIHVwZGF0aW5nIGZsYXNoIGFyZSBnaXZlbiBiZWxvdy4KKworVGhlIHUtYm9vdCBjb21tYW5kcyBmb3IgY29weWluZyB0aGUgYm9vdC1iYW5rIGludG8gdGhlIHNlY29uZGFyeSBiYW5rIGFyZQorYXMgZm9sbG93czoKKworCWVyYXNlIGZmODAwMDAwIGZmODgwMDAwCisJY3AuYiBmZjAwMDAwMCBmZjgwMDAwMCA4MDAwMAorCitVLWJvb3QgY29tbWFuZHMgZm9yIGRvd25sb2FkaW5nIGFuIGltYWdlIHZpYSB0ZnRwIGFuZCBmbGFzaGluZworaXQgaW50byB0aGUgc2Vjb25kYXJ5IGJhbms6CisKKwl0ZnRwIDEwMDAwIDx1LWJvb3QuYmluLmltYWdlPgorCWVyYXNlIGZmMDAwMDAwIGZmMDgwMDAwCisJY3AuYiAxMDAwMCBmZjAwMDAwMCA4MDAwMAorCitBZnRlciBjb3B5aW5nIHRoZSBpbWFnZSBpbnRvIHRoZSBzZWNvbmQgYmFuayBvZiBmbGFzaCwgYmUgc3VyZSB0byB0b2dnbGUKK1NXM1s0XSBvbiBib2FyZCBiZWZvcmUgcmVzZXR0aW5nIHRoZSBib2FyZCBpbiBvcmRlciB0byBzZXQgdGhlCitzZWNvbmRhcnkgYmFuayBhcyB0aGUgYm9vdC1iYW5rLgorCitCb2FyZCBTd2l0Y2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IHN3aXRjaGVzIG9uIHRoZSBib2FyZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuICBUaGUgbW9zdCBmcmVxdWVudAordXNlci1zZXR0YWJsZSBzd2l0Y2hlcyBvbiB0aGUgYm9hcmQgYXJlIHVzZWQgdG8gY29uZmlndXJlCit0aGUgZmxhc2ggYmFua3MgYW5kIGRldGVybWluaW5nIHRoZSBQQ0kgZnJlcXVlbmN5LgorCitTVzFbMS01XTogUHJvY2Vzc29yIGNvcmUgdm9sdGFnZQorCisJMTIzNDUJCUNvcmUgVm9sdGFnZQorCS0tLS0tCisJU1cxPTAxMTExCTEuMDAwVi4KKwlTVzE9MDExMDEJMS4xMDBWLgorCVNXMT0wMTAxMQkxLjIwMFYuCisJU1cxPTAxMDAxCTEuMzAwViBvbmx5IGZvciBNUEM3NDQ3QS4KKworCitTVzJbMS02XTogQ1BVIGNvcmUgZnJlcXVlbmN5CisKKwkJQ1BVIENvcmUgRnJlcXVlbmN5IChNSHopCisJCQlCdXMgRnJlcXVlbmN5CisJMTIzNDU2CQkxMDAJMTMzCTE2NwkyMDAJUmF0aW8KKworCS0tLS0tLQorCVNXMj0xMDExMDAJNTAwCTY2Nwk4MzMJMTAwMAk1eAorCVNXMj0xMDAxMDAJNTUwCTczMwk5MTcJMTEwMAk1LjV4CisJU1cyPTExMDEwMAk2MDAJODAwCTEwMDAJMTIwMAk2eAorCVNXMj0wMTAxMDAJNjUwCTg2NgkxMDgzCTEzMDAJNi41eAorCVNXMj0wMDEwMDAJNzAwCTkzMAkxMTY3CTE0MDAJN3gKKwlTVzI9MDAwMTAwCTc1MAkxMDAwCTEyNTAJMTUwMAk3LjV4CisJU1cyPTExMDAwMAk4MDAJMTA2NgkxMzMzCTE2MDAJOHgKKwlTVzI9MDExMDAwCTg1MAkxMzMzCTE0MTcJMTcwMAk4LjV4IG9ubHkgZm9yIE1QQzc0NDdBCisJU1cyPTAxMTExMAk5MDAJMTIwMAkxNTAwCTE4MDAJOXgKKworVGhpcyB0YWJsZSBzaG93cyBvbmx5IGEgc3Vic2V0IG9mIGF2YWlsYWJsZSBmcmVxdWVuY3kgb3B0aW9uczsgc2VlIHRoZSBDUFUKK2hhcmR3YXJlIHNwZWNpZmljYXRpb25zIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitTVzJbNy04XTogQnVzIFByb3RvY29sIGFuZCBDUFUgUmVzZXQgT3B0aW9uCisKKwk3CisJLQorCVNXMj0wCQlTeXN0ZW0gYnVzIHVzZXMgTVBYIGJ1cyBwcm90b2NvbAorCVNXMj0xCQlTeXN0ZW0gYnVzIHVzZXMgNjB4IGJ1cyBwcm90b2NvbAorCisJOAorCS0KKwlTVzI9MAkJVFNJMTA4IGNhbiBjYXVzZSBDUFUgcmVzZXQKKwlTVzI9MQkJVFNJMTA4IGNhbiBub3QgY2F1c2UgQ1BVIHJlc2V0CisKK1NXM1sxLThdIHN5c3RlbSBvcHRpb25zCisKKwkxMjMKKwktLS0KKwlTVzM9eHh4CQlDb25uZWN0ZWQgdG8gR1BJT1swOjJdIG9uIFRTSTEwOAorCisJNAorCS0KKwlTVzM9MAkJQ1BVIGJvb3RzIGZyb20gbG93IGhhbGYgb2YgZmxhc2gKKwlTVzM9MQkJQ1BVIGJvb3RzIGZyb20gaGlnaCBoYWxmIG9mIGZsYXNoCisKKwk1CisJLQorCVNXMz0wCQlTQVRBIGFuZCBzbG90MiBjb25uZWN0ZWQgdG8gUENJIGJ1cworCVNXMz0xCQlPbmx5IHNsb3QxIGNvbm5lY3RlZCB0byBQQ0kgYnVzCisKKwk2CisJLQorCVNXMz0wCQlVU0IgY29ubmVjdGVkIHRvIFBDSSBidXMKKwlTVzM9MQkJVVNCIGRpc2Nvbm5lY3RlZCBmcm9tIFBDSSBidXMKKworCTcKKwktCisJU1czPTAJCUZsYXNoIGlzIHdyaXRlIHByb3RlY3RlZAorCVNXMz0xCQlGbGFzaCBpcyBOT1Qgd3JpdGUgcHJvdGVjdGVkCisKKwk4CisJLQorCVNXMz0wCQlDUFUgd2lsbCBib290IGZyb20gZmxhc2gKKwlTVzM9MQkJQ1BVIHdpbGwgYm9vdCBmcm9tIFByb21KZXQKKworU1c0WzEtM106IFN5c3RlbSBidXMgZnJlcXVlbmN5CisKKwkJCUJ1cyBGcmVxdWVuY3kgKE1IeikKKwktLS0KKwlTVzQ9MDEwCQkJMTgzCisJU1c0PTAxMQkJCTEwMAorCVNXND0xMDAJCQkxMzMKKwlTVzQ9MTAxCQkJMTY2IG9ubHkgZm9yIE1QQzc0NDdBCisJU1c0PTExMAkJCTIwMCBvbmx5IGZvciBNUEM3NDQ4CisJb3RoZXJzCQkJcmVzZXJ2ZWQKKworU1c0WzQtNl06IEREUjIgU0RSQU0gZnJlcXVlbmN5CisKKwkJCUJ1cyBGcmVxdWVuY3kgKE1IeikKKwktLS0KKwlTVzQ9MDAwCQlleHRlcm5hbCBjbG9jaworCVNXND0wMTEJCXN5c3RlbSBjbG9jaworCVNXND0xMDAJCTEzMworCVNXND0xMDEJCTE2NgorCVNXND0xMTAJCTIwMAorCW90aGVycwkJcmVzZXJ2ZWQKKworU1c0WzctOF06IFBDSS9QQ0ktWCBmcmVxdWVuY3kgY29udHJvbAorCTcKKwktCisJU1c0PTAJCVBDSS9QQ0ktWCBidXMgb3BlcmF0ZXMgbm9ybWFsbHkKKwlTVzQ9MQkJUENJIGJ1cyBmb3JjZWQgdG8gUENJLTMzIG1vZGUKKworCTgKKwktCisJU1c0PTAJCVBDSS1YIG1vZGUgYXQgMTMzIE1IeiBhbGxvd2VkCisJU1c0PTEJCVBDSS1YIG1vZGUgbGltaXRlZCB0byAxMDAgTUh6CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBmZmZjMjJhLi42MGNlM2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTM1LDggKzM1LDggQEAKIAkgIGxhbjkxYzk2Lm8gXAogCSAgbmF0c2VtaS5vIG5lMjAwMC5vIG5ldGFybV9ldGgubyBuZXRjb25zb2xlLm8gXAogCSAgbnMxNjU1MC5vIG5zODM4MngubyBuczg3MzA4Lm8gbnM3NTIwX2V0aC5vIG9tYXAxNTEwX2kyYy5vIFwKLQkgIG9tYXAyNHh4X2kyYy5vIHBjaS5vIHBjaV9hdXRvLm8gcGNpX2luZGlyZWN0Lm8gXAotCSAgcGNuZXQubyBwbGIyODAwX2V0aC5vIFwKKwkgIG9tYXAyNHh4X2kyYy5vIHBjaS5vIHBjaV9hdXRvLm8gcGNpX2luZGlyZWN0Lm8gdHNpMTA4X3BjaS5vXAorCSAgdHNpMTA4X2kyYy5vIHBjbmV0Lm8gcGxiMjgwMF9ldGgubyBcCiAJICBwczJzZXIubyBwczJtdWx0Lm8gcGNfa2V5Yi5vIFwKIAkgIHJ0bDgwMTkubyBydGw4MTM5Lm8gcnRsODE2OS5vIFwKIAkgIHMzYzQ1MTBiX2V0aC5vIHMzYzQ1MTBiX3VhcnQubyBcCkBAIC00NSw3ICs0NSw3IEBACiAJICBzZXJpYWxfcGwwMTAubyBzZXJpYWxfcGwwMTEubyBzZXJpYWxfeHVhcnRsaXRlLm8gXAogCSAgc2w4MTFfdXNiLm8gc201MDEubyBzbWM5MTExMS5vIHNtaUx5bnhFTS5vIFwKIAkgIHN0YXR1c19sZWQubyBzeW01M2M4eHgubyBzeXN0ZW1hY2UubyBhaGNpLm8gXAotCSAgdGlfcGNpMTQxMGEubyB0aWdvbjMubyB0c2VjLm8gXAorCSAgdGlfcGNpMTQxMGEubyB0aWdvbjMubyB0c2VjLm8gdHNpMTA4X2V0aC5vXAogCSAgdXNiZGNvcmUubyB1c2JkY29yZV9lcDAubyB1c2JkY29yZV9vbWFwMTUxMC5vIHVzYnR0eS5vIFwKIAkgIHZpZGVvbW9kZXMubyB3ODNjNTUzZi5vIFwKIAkgIGtzODY5NWV0aC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHNpMTA4X2V0aC5jIGIvZHJpdmVycy90c2kxMDhfZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczNDFiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHNpMTA4X2V0aC5jCkBAIC0wLDAgKzEsMTAzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogRGVzY3JpcHRpb246CisgKiAgIEV0aGVybmV0IGludGVyZmFjZSBmb3IgVHVuZHJhIFRTSTEwOCBicmlkZ2UgY2hpcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKSAmJiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpIFwKKwkmJiBkZWZpbmVkKENPTkZJR19UU0kxMDhfRVRIKQorCisjaWYgIWRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTKSB8fCAoQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTID4gMikKKyNlcnJvciAiQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTIG11c3QgYmUgZGVmaW5lZCBhcyAxIG9yIDIiCisjZW5kaWYKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgVFNJMTA4X0VUSF9ERUJVRyA3CisjZWxzZQorI2RlZmluZSBUU0kxMDhfRVRIX0RFQlVHIDAKKyNlbmRpZgorCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDAKKyNkZWZpbmUgZGVidWdfbGV2KGxldiwgZm10LCBhcmdzLi4uKSBcCitpZiAobGV2IDw9IFRTSTEwOF9FVEhfREVCVUcpIFwKK3ByaW50ZiAoIiVzICVkOiAiIGZtdCwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdfbGV2KGxldiwgZm10LCBhcmdzLi4uKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIFJYX1BSSU5UX0VSUk9SUworI2RlZmluZSBUWF9QUklOVF9FUlJPUlMKKworI2RlZmluZSBFVEhfQkFTRQkoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIDB4NjAwMCkKKworI2RlZmluZSBFVEhfUE9SVF9PRkZTRVQJMHg0MDAKKworI2RlZmluZSBfX1JFRzMyKGJhc2UsIG9mZnNldCkgKCooKHZvbGF0aWxlIHUzMiAqKSgoY2hhciAqKShiYXNlKSArIChvZmZzZXQpKSkpCisKKyNkZWZpbmUgcmVnX01BQ19DT05GSUdfMShiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfVFhfRU5BQkxFCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1NZTkNfVFhfRU5BQkxFCSgweDAwMDAwMDAyKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUlhfRU5BQkxFCQkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1NZTkNfUlhfRU5BQkxFCSgweDAwMDAwMDA4KQorI2RlZmluZSBNQUNfQ09ORklHXzFfVFhfRkxPV19DT05UUk9MCSgweDAwMDAwMDEwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUlhfRkxPV19DT05UUk9MCSgweDAwMDAwMDIwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfTE9PUF9CQUNLCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1JFU0VUX1RYX0ZVTkNUSU9OCSgweDAwMDEwMDAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUkVTRVRfUlhfRlVOQ1RJT04JKDB4MDAwMjAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SRVNFVF9UWF9NQUMJKDB4MDAwNDAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SRVNFVF9SWF9NQUMJKDB4MDAwODAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9TSU1fUkVTRVQJCSgweDQwMDAwMDAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfU09GVF9SRVNFVAkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX01BQ19DT05GSUdfMihiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ09ORklHXzJfRlVMTF9EVVBMRVgJKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1BQ19DT05GSUdfMl9DUkNfRU5BQkxFCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUFDX0NPTkZJR18yX1BBRF9DUkMJCSgweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ09ORklHXzJfTEVOR1RIX0NIRUNLCSgweDAwMDAwMDEwKQorI2RlZmluZSBNQUNfQ09ORklHXzJfSFVHRV9GUkFNRQkJKDB4MDAwMDAwMjApCisjZGVmaW5lIE1BQ19DT05GSUdfMl9JTlRFUkZBQ0VfTU9ERSh2YWwpCSgoKHZhbCkgJiAweDMpIDw8IDgpCisjZGVmaW5lIE1BQ19DT05GSUdfMl9QUkVBTUJMRV9MRU5HVEgodmFsKQkoKCh2YWwpICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgSU5URVJGQUNFX01PREVfTklCQkxFCQkxCS8qIDEwLzEwMCBNYi9zIE1JSSkgKi8KKyNkZWZpbmUgSU5URVJGQUNFX01PREVfQllURQkJMgkvKiAxMDAwIE1iL3MgR01JSS9UQkkgKi8KKworI2RlZmluZSByZWdfTUFYSU1VTV9GUkFNRV9MRU5HVEgoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAxMCkKKworI2RlZmluZSByZWdfTUlJX01HTVRfQ09ORklHKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMjApCisjZGVmaW5lIE1JSV9NR01UX0NPTkZJR19NR01UX0NMT0NLX1NFTEVDVCh2YWwpCSgodmFsKSAmIDB4NykKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX05PX1BSRUFNQkxFCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX1NDQU5fSU5DUkVNRU5UCQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX1JFU0VUX01HTVQJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMjQpCisjZGVmaW5lIE1JSV9NR01UX0NPTU1BTkRfUkVBRF9DWUNMRQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1JSV9NR01UX0NPTU1BTkRfU0NBTl9DWUNMRQkJKDB4MDAwMDAwMDIpCisKKyNkZWZpbmUgcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyOCkKKyNkZWZpbmUgcmVnX01JSV9NR01UX0NPTlRST0woYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyYykKKyNkZWZpbmUgcmVnX01JSV9NR01UX1NUQVRVUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDMwKQorCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9JTkRJQ0FUT1JTKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMzQpCisjZGVmaW5lIE1JSV9NR01UX0lORElDQVRPUlNfQlVTWQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1JSV9NR01UX0lORElDQVRPUlNfU0NBTgkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1JSV9NR01UX0lORElDQVRPUlNfTk9UX1ZBTElECQkoMHgwMDAwMDAwNCkKKworI2RlZmluZSByZWdfSU5URVJGQUNFX1NUQVRVUyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMDNjKQorI2RlZmluZSBJTlRFUkZBQ0VfU1RBVFVTX0xJTktfRkFJTAkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIElOVEVSRkFDRV9TVEFUVVNfRVhDRVNTX0RFRkVSCQkoMHgwMDAwMDIwMCkKKworI2RlZmluZSByZWdfU1RBVElPTl9BRERSRVNTXzEoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDA0MCkKKyNkZWZpbmUgcmVnX1NUQVRJT05fQUREUkVTU18yKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAwNDQpCisKKyNkZWZpbmUgcmVnX1BPUlRfQ09OVFJPTChiYXNlKQkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1BSSQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9CUFQJCSgweDAwMDEwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfU1BECQkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1JCQwkJKDB4MDAwODAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9QUkIJCSgweDAwMjAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfRElTCQkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1RCSQkJKDB4MDA4MDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TVEUJCSgweDEwMDAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfWk9SCQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX0NMUgkJKDB4NDAwMDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TUlQJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9DT05GSUcoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIyMCkKKyNkZWZpbmUgVFhfQ09ORklHX1NUQVJUX1EJCSgweDAwMDAwMDAzKQorI2RlZmluZSBUWF9DT05GSUdfRUhQCQkJKDB4MDA0MDAwMDApCisjZGVmaW5lIFRYX0NPTkZJR19DSFAJCQkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgVFhfQ09ORklHX1JTVAkJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9DT05UUk9MKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAyMjQpCisjZGVmaW5lIFRYX0NPTlRST0xfR08JCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUgVFhfQ09OVFJPTF9NUAkJCSgweDAxMDAwMDAwKQorI2RlZmluZSBUWF9DT05UUk9MX0VBSQkJCSgweDIwMDAwMDAwKQorI2RlZmluZSBUWF9DT05UUk9MX0FCVAkJCSgweDQwMDAwMDAwKQorI2RlZmluZSBUWF9DT05UUk9MX0VJSQkJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9TVEFUVVMoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIyOCkKKyNkZWZpbmUgVFhfU1RBVFVTX1FVRVVFX1VTQUJMRQkJKDB4MDAwMDAwMGYpCisjZGVmaW5lIFRYX1NUQVRVU19DVVJSX1EJCSgweDAwMDAwMzAwKQorI2RlZmluZSBUWF9TVEFUVVNfQUNUCQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIFRYX1NUQVRVU19RVUVVRV9JRExFCQkoMHgwMDBmMDAwMCkKKyNkZWZpbmUgVFhfU1RBVFVTX0VPUV9QRU5ESU5HCQkoMHgwZjAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfRVhURU5ERURfU1RBVFVTKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAyMmMpCisjZGVmaW5lIFRYX0VYVEVOREVEX1NUQVRVU19FTkRfT0ZfUVVFVUVfQ09ORElUSU9OCQkoMHgwMDAwMDAwZikKKyNkZWZpbmUgVFhfRVhURU5ERURfU1RBVFVTX0VORF9PRl9GUkFNRV9DT05ESVRJT04JCSgweDAwMDAwZjAwKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfREVTQ1JJUFRPUl9JTlRFUlJVUFRfQ09ORElUSU9OCSgweDAwMGYwMDAwKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfRVJST1JfRkxBRwkJCQkoMHgwZjAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfVEhSRVNIT0xEUyhiYXNlKQkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDIzMCkKKworI2RlZmluZSByZWdfVFhfRElBR05PU1RJQ19BRERSKGJhc2UpICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAyNzApCisjZGVmaW5lIFRYX0RJQUdOT1NUSUNfQUREUl9JTkRFWAkJKDB4MDAwMDAwN2YpCisjZGVmaW5lIFRYX0RJQUdOT1NUSUNfQUREUl9ERlIJCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgVFhfRElBR05PU1RJQ19BRERSX0FJCQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjc0KQorCisjZGVmaW5lIHJlZ19UWF9FUlJPUl9TVEFUVVMoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDI3OCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTCQkJCSgweDAwMDAwMjc4KQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUVVFVUVfMF9FUlJPUl9SRVNQT05TRQkoMHgwMDAwMDAwZikKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFQV9PTl9RVUVVRV8wCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1JFUl9PTl9RVUVVRV8wCQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFUl9PTl9RVUVVRV8wCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX0RFUl9PTl9RVUVVRV8wCQkoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1FVRVVFXzFfRVJST1JfUkVTUE9OU0UJKDB4MDAwMDBmMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URUFfT05fUVVFVUVfMQkJKDB4MDAwMDEwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19SRVJfT05fUVVFVUVfMQkJKDB4MDAwMDIwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URVJfT05fUVVFVUVfMQkJKDB4MDAwMDQwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19ERVJfT05fUVVFVUVfMQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19RVUVVRV8yX0VSUk9SX1JFU1BPTlNFCSgweDAwMGYwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVBX09OX1FVRVVFXzIJCSgweDAwMTAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUkVSX09OX1FVRVVFXzIJCSgweDAwMjAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVSX09OX1FVRVVFXzIJCSgweDAwNDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfREVSX09OX1FVRVVFXzIJCSgweDAwODAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUVVFVUVfM19FUlJPUl9SRVNQT05TRQkoMHgwZjAwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFQV9PTl9RVUVVRV8zCQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1JFUl9PTl9RVUVVRV8zCQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFUl9PTl9RVUVVRV8zCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX0RFUl9PTl9RVUVVRV8zCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfUVVFVUVfMF9DT05GSUcoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDI4MCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfT0NOX1BPUlQJCSgweDAwMDAwMDNmKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19CU1dQCQkJKDB4MDAwMDA0MDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX1dTV1AJCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfQU0JCQkoMHgwMDAwNDAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfR1ZJCQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VFSQkJCSgweDAwMDEwMDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19FTEkJCQkoMHgwMDAyMDAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfRU5JCQkJKDB4MDAwNDAwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VTSQkJCSgweDAwMDgwMDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19FREkJCQkoMHgwMDEwMDAwMCkKKworI2RlZmluZSByZWdfVFhfUVVFVUVfMF9CVUZfQ09ORklHKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAyODQpCisjZGVmaW5lIFRYX1FVRVVFXzBfQlVGX0NPTkZJR19PQ05fUE9SVAkJKDB4MDAwMDAwM2YpCisjZGVmaW5lIFRYX1FVRVVFXzBfQlVGX0NPTkZJR19CVVJTVAkJKDB4MDAwMDAzMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQlVGX0NPTkZJR19CU1dQCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX1dTV1AJCSgweDAwMDAwODAwKQorCisjZGVmaW5lIE9DTl9QT1JUX0hMUAkJCTAJLyogSExQIEludGVyZmFjZSAqLworI2RlZmluZSBPQ05fUE9SVF9QQ0lfWAkJCTEJLyogUENJLVggSW50ZXJmYWNlICovCisjZGVmaW5lIE9DTl9QT1JUX1BST0NFU1NPUl9NQVNURVIJMgkvKiBQcm9jZXNzb3IgSW50ZXJmYWNlIChtYXN0ZXIpICovCisjZGVmaW5lIE9DTl9QT1JUX1BST0NFU1NPUl9TTEFWRQkzCS8qIFByb2Nlc3NvciBJbnRlcmZhY2UgKHNsYXZlKSAqLworI2RlZmluZSBPQ05fUE9SVF9NRU1PUlkJCQk0CS8qIE1lbW9yeSBDb250cm9sbGVyICovCisjZGVmaW5lIE9DTl9QT1JUX0RNQQkJCTUJLyogRE1BIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgT0NOX1BPUlRfRVRIRVJORVQJCTYJLyogRXRoZXJuZXQgQ29udHJvbGxlciAqLworI2RlZmluZSBPQ05fUE9SVF9QUklOVAkJCTcJLyogUHJpbnQgRW5naW5lIEludGVyZmFjZSAqLworCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX1BUUl9MT1coYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDI4OCkKKworI2RlZmluZSByZWdfVFhfUVVFVUVfMF9QVFJfSElHSChiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMjhjKQorI2RlZmluZSBUWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElECQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfUlhfQ09ORklHKGJhc2UpCQkJX19SRUczMihiYXNlLCAweDAwMDAwMzIwKQorI2RlZmluZSBSWF9DT05GSUdfREVGX1EJCQkJKDB4MDAwMDAwMDMpCisjZGVmaW5lIFJYX0NPTkZJR19FTUYJCQkJKDB4MDAwMDAxMDApCisjZGVmaW5lIFJYX0NPTkZJR19FVUYJCQkJKDB4MDAwMDAyMDApCisjZGVmaW5lIFJYX0NPTkZJR19CRkUJCQkJKDB4MDAwMDA0MDApCisjZGVmaW5lIFJYX0NPTkZJR19NRkUJCQkJKDB4MDAwMDA4MDApCisjZGVmaW5lIFJYX0NPTkZJR19VRkUJCQkJKDB4MDAwMDEwMDApCisjZGVmaW5lIFJYX0NPTkZJR19TRQkJCQkoMHgwMDAwMjAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0FCRgkJCQkoMHgwMDIwMDAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0FQRQkJCQkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0NIUAkJCQkoMHgwMDgwMDAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX1JTVAkJCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfUlhfQ09OVFJPTChiYXNlKQkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDMyNCkKKyNkZWZpbmUgR0VfRTBfUlhfQ09OVFJPTF9RVUVVRV9FTkFCTEVTCQkoMHgwMDAwMDAwZikKKyNkZWZpbmUgR0VfRTBfUlhfQ09OVFJPTF9HTwkJCSgweDAwMDA4MDAwKQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX0VBSQkJCSgweDIwMDAwMDAwKQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX0FCVAkJCSgweDQwMDAwMDAwKQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX0VJSQkJCSgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19SWF9FWFRFTkRFRF9TVEFUVVMoYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDMyYykKKyNkZWZpbmUgUlhfRVhURU5ERURfU1RBVFVTCQkJKDB4MDAwMDAzMmMpCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FT1EJCQkoMHgwMDAwMDAwZikKKyNkZWZpbmUgUlhfRVhURU5ERURfU1RBVFVTX0VPUV8wCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgUlhfRVhURU5ERURfU1RBVFVTX0VPRgkJCSgweDAwMDAwZjAwKQorI2RlZmluZSBSWF9FWFRFTkRFRF9TVEFUVVNfREVTQ1JJUFRPUl9JTlRFUlJVUFRfQ09ORElUSU9OCSgweDAwMGYwMDAwKQorI2RlZmluZSBSWF9FWFRFTkRFRF9TVEFUVVNfRVJST1JfRkxBRwkJCQkoMHgwZjAwMDAwMCkKKworI2RlZmluZSByZWdfUlhfVEhSRVNIT0xEUyhiYXNlKQkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDMzMCkKKworI2RlZmluZSByZWdfUlhfRElBR05PU1RJQ19BRERSKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzNzApCisjZGVmaW5lIFJYX0RJQUdOT1NUSUNfQUREUl9JTkRFWAkJKDB4MDAwMDAwN2YpCisjZGVmaW5lIFJYX0RJQUdOT1NUSUNfQUREUl9ERlIJCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUlhfRElBR05PU1RJQ19BRERSX0FJCQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMzc0KQorCisjZGVmaW5lIHJlZ19SWF9RVUVVRV8wX0NPTkZJRyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMzgwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19PQ05fUE9SVAkJKDB4MDAwMDAwM2YpCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0JTV1AJCQkoMHgwMDAwMDQwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfV1NXUAkJCSgweDAwMDAwODAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19BTQkJCSgweDAwMDA0MDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FRUkJCQkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfRUxJCQkJKDB4MDAwMjAwMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0VOSQkJCSgweDAwMDQwMDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FU0kJCQkoMHgwMDA4MDAwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfRURJCQkJKDB4MDAxMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX1FVRVVFXzBfQlVGX0NPTkZJRyhiYXNlKQkJX19SRUczMihiYXNlLCAweDAwMDAwMzg0KQorI2RlZmluZSBSWF9RVUVVRV8wX0JVRl9DT05GSUdfT0NOX1BPUlQJCSgweDAwMDAwMDNmKQorI2RlZmluZSBSWF9RVUVVRV8wX0JVRl9DT05GSUdfQlVSU1QJCSgweDAwMDAwMzAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0JVRl9DT05GSUdfQlNXUAkJKDB4MDAwMDA0MDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19XU1dQCQkoMHgwMDAwMDgwMCkKKworI2RlZmluZSByZWdfUlhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpCQlfX1JFRzMyKGJhc2UsIDB4MDAwMDAzODgpCisKKyNkZWZpbmUgcmVnX1JYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkJCV9fUkVHMzIoYmFzZSwgMHgwMDAwMDM4YykKKyNkZWZpbmUgUlhfUVVFVUVfMF9QVFJfSElHSF9WQUxJRAkJKDB4ODAwMDAwMDApCisKKy8qCisgKiAgUEhZIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKy8qIHRoZSBmaXJzdCAxNSBQSFkgcmVnaXN0ZXJzIGFyZSBzdGFuZGFyZC4gKi8KKyNkZWZpbmUgUEhZX0NUUkxfUkVHCQkwCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEhZX1NUQVRVU19SRUcJCTEJLyogU3RhdHVzIFJlZ2lzZXIgKi8KKyNkZWZpbmUgUEhZX0lEMV9SRUcJCTIJLyogUGh5IElkIFJlZyAod29yZCAxKSAqLworI2RlZmluZSBQSFlfSUQyX1JFRwkJMwkvKiBQaHkgSWQgUmVnICh3b3JkIDIpICovCisjZGVmaW5lIFBIWV9BTl9BRFZfUkVHCQk0CS8qIEF1dG9uZWcgQWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZSBQSFlfTFBfQUJJTElUWV9SRUcJNQkvKiBMaW5rIFBhcnRuZXIgQWJpbGl0eSAoQmFzZSBQYWdlKSAqLworI2RlZmluZSBQSFlfQVVUT05FR19FWFBfUkVHCTYJLyogQXV0b25lZyBFeHBhbnNpb24gUmVnICovCisjZGVmaW5lIFBIWV9ORVhUX1BBR0VfVFhfUkVHCTcJLyogTmV4dCBQYWdlIFRYICovCisjZGVmaW5lIFBIWV9MUF9ORVhUX1BBR0VfUkVHCTgJLyogTGluayBQYXJ0bmVyIE5leHQgUGFnZSAqLworI2RlZmluZSBQSFlfMTAwMFRfQ1RSTF9SRUcJOQkvKiAxMDAwQmFzZS1UIENvbnRyb2wgUmVnICovCisjZGVmaW5lIFBIWV8xMDAwVF9TVEFUVVNfUkVHCTEwCS8qIDEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqLworI2RlZmluZSBQSFlfRVhUX1NUQVRVU19SRUcJMTEJLyogRXh0ZW5kZWQgU3RhdHVzIFJlZyAqLworCisvKgorICogUEhZIFJlZ2lzdGVyIGJpdCBtYXNrcy4KKyAqLworI2RlZmluZSBQSFlfQ1RSTF9SRVNFVAkJKDEgPDwgMTUpCisjZGVmaW5lIFBIWV9DVFJMX0xPT1BCQUNLCSgxIDw8IDE0KQorI2RlZmluZSBQSFlfQ1RSTF9TUEVFRDAJCSgxIDw8IDEzKQorI2RlZmluZSBQSFlfQ1RSTF9BTl9FTgkJKDEgPDwgMTIpCisjZGVmaW5lIFBIWV9DVFJMX1BXUl9ETgkJKDEgPDwgMTEpCisjZGVmaW5lIFBIWV9DVFJMX0lTT0xBVEUJKDEgPDwgMTApCisjZGVmaW5lIFBIWV9DVFJMX1JFU1RBUlRfQU4JKDEgPDwgOSkKKyNkZWZpbmUgUEhZX0NUUkxfRlVMTF9EVVBMRVgJKDEgPDwgOCkKKyNkZWZpbmUgUEhZX0NUUkxfQ1RfRU4JCSgxIDw8IDcpCisjZGVmaW5lIFBIWV9DVFJMX1NQRUVEMQkJKDEgPDwgNikKKworI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1Q0CSgxIDw8IDE1KQorI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1hfRkQJKDEgPDwgMTQpCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfWF9IRAkoMSA8PCAxMykKKyNkZWZpbmUgUEhZX1NUQVRfMTBCQVNFX1RfRkQJKDEgPDwgMTIpCisjZGVmaW5lIFBIWV9TVEFUXzEwQkFTRV9UX0hECSgxIDw8IDExKQorI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1QyX0ZECSgxIDw8IDEwKQorI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1QyX0hECSgxIDw8IDkpCisjZGVmaW5lIFBIWV9TVEFUX0VYVF9TVEFUCSgxIDw8IDgpCisjZGVmaW5lIFBIWV9TVEFUX1JFU0VSVkVECSgxIDw8IDcpCisjZGVmaW5lIFBIWV9TVEFUX01GUFMJCSgxIDw8IDYpCS8qIE1hbmFnZW1lbnQgRnJhbWVzIFByZWFtYmxlIFN1cHByZXNzaW9uICovCisjZGVmaW5lIFBIWV9TVEFUX0FOX0NPTVBMRVRFCSgxIDw8IDUpCisjZGVmaW5lIFBIWV9TVEFUX1JFTV9GQVVMVAkoMSA8PCA0KQorI2RlZmluZSBQSFlfU1RBVF9BTl9DQVAJCSgxIDw8IDMpCisjZGVmaW5lIFBIWV9TVEFUX0xJTktfVVAJKDEgPDwgMikKKyNkZWZpbmUgUEhZX1NUQVRfSkFCQkVSCQkoMSA8PCAxKQorI2RlZmluZSBQSFlfU1RBVF9FWFRfQ0FQCSgxIDw8IDApCisKKyNkZWZpbmUgVEJJX0NPTlRST0xfMgkJCQkJMHgxMQorI2RlZmluZSBUQklfQ09OVFJPTF8yX0VOQUJMRV9DT01NQV9ERVRFQ1QJCTB4MDAwMQorI2RlZmluZSBUQklfQ09OVFJPTF8yX0VOQUJMRV9XUkFQCQkJMHgwMDAyCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfR19NSUlfTU9ERQkJCTB4MDAxMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX1JFQ0VJVkVfQ0xPQ0tfU0VMRUNUCQkweDAwMjAKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9BVVRPX05FR09USUFUSU9OX1NFTlNFCQkweDAxMDAKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9ESVNBQkxFX1RSQU5TTUlUX1JVTk5JTkdfRElTUEFSSVRZCTB4MTAwMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX0RJU0FCTEVfUkVDRUlWRV9SVU5OSU5HX0RJU1BBUklUWQkJMHgyMDAwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfU0hPUlRDVVRfTElOS19USU1FUgkJCTB4NDAwMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX1NPRlRfUkVTRVQJCQkJMHg4MDAwCisKKy8qIG1hcnZlbCBzcGVjaWZpYyAqLworI2RlZmluZSBNVjExMTFfRVhUX0NUUkwxX1JFRwkxNgkvKiBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgTVYxMTExX1NQRUNfU1RBVF9SRUcJMTcJLyogUEhZIFNwZWNpZmljIFN0YXR1cyBSZWcgKi8KKyNkZWZpbmUgTVYxMTExX0VYVF9DVFJMMl9SRUcJMjAJLyogRXh0ZW5kZWQgUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnICovCisKKy8qCisgKiBNQVJWRUxMIDg4RTExMTEgUEhZIHJlZ2lzdGVyIGJpdCBtYXNrcworICovCisvKiBQSFkgU3BlY2lmaWMgU3RhdHVzIFJlZ2lzdGVyIChNVjExMTFfRVhUX0NUUkwxX1JFRykgKi8KKworI2RlZmluZSBTUEVDX1NUQVRfU1BFRURfTUFTSwkoMyA8PCAxNCkKKyNkZWZpbmUgU1BFQ19TVEFUX0ZVTExfRFVQCSgxIDw8IDEzKQorI2RlZmluZSBTUEVDX1NUQVRfUEFHRV9SQ1ZECSgxIDw8IDEyKQorI2RlZmluZSBTUEVDX1NUQVRfUkVTT0xWRUQJKDEgPDwgMTEpCS8qIFNwZWVkIGFuZCBEdXBsZXggUmVzb2x2ZWQgKi8KKyNkZWZpbmUgU1BFQ19TVEFUX0xJTktfVVAJKDEgPDwgMTApCisjZGVmaW5lIFNQRUNfU1RBVF9DQUJMRV9MRU5fTUFTSwkoNyA8PCA3KS8qIENhYmxlIExlbmd0aCAoMTAwLzEwMDAgbW9kZXMgb25seSkgKi8KKyNkZWZpbmUgU1BFQ19TVEFUX01ESVgJCSgxIDw8IDYpCisjZGVmaW5lIFNQRUNfU1RBVF9QT0xBUklUWQkoMSA8PCAxKQorI2RlZmluZSBTUEVDX1NUQVRfSkFCQkVSCSgxIDw8IDApCisKKyNkZWZpbmUgU1BFRURfMTAwMAkJKDIgPDwgMTQpCisjZGVmaW5lIFNQRUVEXzEwMAkJKDEgPDwgMTQpCisjZGVmaW5lIFNQRUVEXzEwCQkoMCA8PCAxNCkKKworI2RlZmluZSBUQklfQUREUgkweDFFCS8qIFRlbiBCaXQgSW50ZXJmYWNlIGFkZHJlc3MgKi8KKworLyogbmVnb3RpYXRlZCBsaW5rIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTElOS19TUEVFRF9VTktOT1dOCTAKKyNkZWZpbmUgTElOS19TUEVFRF8xMAkJMQorI2RlZmluZSBMSU5LX1NQRUVEXzEwMAkJMgorI2RlZmluZSBMSU5LX1NQRUVEXzEwMDAJCTMKKworI2RlZmluZSBMSU5LX0RVUExFWF9VTktOT1dOCTAKKyNkZWZpbmUgTElOS19EVVBMRVhfSEFMRgkxCisjZGVmaW5lIExJTktfRFVQTEVYX0ZVTEwJMgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBoeV9hZGRyZXNzW10gPSB7IDgsIDkgfTsKKworI2RlZmluZSB2dWludDMyIHZvbGF0aWxlIHUzMgorCisvKiBUWC9SWCBidWZmZXIgZGVzY3JpcHRvcnMuIE1VU1QgYmUgY2FjaGUgbGluZSBhbGlnbmVkIGluIG1lbW9yeS4gKDMyIGJ5dGUpCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBhY2Nlc3NlZCBieSB0aGUgZXRoZXJuZXQgRE1BIGVuZ2luZSB3aGljaCBtZWFucyBpdAorICogTVVTVCBiZSBpbiBMSVRUTEUgRU5ESUFOIGZvcm1hdCAqLworc3RydWN0IGRtYV9kZXNjcmlwdG9yIHsKKwl2dWludDMyIHN0YXJ0X2FkZHIwOwkvKiBidWZmZXIgYWRkcmVzcywgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZXMuICovCisJdnVpbnQzMiBzdGFydF9hZGRyMTsJLyogYnVmZmVyIGFkZHJlc3MsIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMuICovCisJdnVpbnQzMiBuZXh0X2Rlc2NyX2FkZHIwOy8qIG5leHQgZGVzY3JpcHRvciBhZGRyZXNzLCBsZWFzdCBzaWduaWZpY2FudCBieXRlcy4gIE11c3QgYmUgNjQtYml0IGFsaWduZWQuICovCisJdnVpbnQzMiBuZXh0X2Rlc2NyX2FkZHIxOy8qIG5leHQgZGVzY3JpcHRvciBhZGRyZXNzLCBtb3N0IHNpZ25pZmljYW50IGJ5dGVzLiAqLworCXZ1aW50MzIgdmxhbl9ieXRlX2NvdW50Oy8qIFZMQU4gdGFnKHRvcCAyIGJ5dGVzKSBhbmQgYnl0ZSBjb3VudHQgKGJvdHRvbSAyIGJ5dGVzKS4gKi8KKwl2dWludDMyIGNvbmZpZ19zdGF0dXM7CS8qIENvbmZpZ3VyYXRpb24vU3RhdHVzLiAqLworCXZ1aW50MzIgcmVzZXJ2ZWQxOwkvKiByZXNlcnZlZCB0byBtYWtlIHRoZSBkZXNjcmlwdG9yIGNhY2hlIGxpbmUgYWxpZ25lZC4gKi8KKwl2dWludDMyIHJlc2VydmVkMjsJLyogcmVzZXJ2ZWQgdG8gbWFrZSB0aGUgZGVzY3JpcHRvciBjYWNoZSBsaW5lIGFsaWduZWQuICovCit9OworCisvKiBsYXN0IG5leHQgZGVzY3JpcHRvciBhZGRyZXNzIGZsYWcgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX0xBU1QJCSgxIDw8IDMxKQorCisvKiBUWCBETUEgZGVzY3JpcHRvciBjb25maWcgc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1RYX0VPRgkoMSA8PCAgMCkJLyogZW5kIG9mIGZyYW1lICovCisjZGVmaW5lIERNQV9ERVNDUl9UWF9TT0YJKDEgPDwgIDEpCS8qIHN0YXJ0IG9mIGZyYW1lICovCisjZGVmaW5lIERNQV9ERVNDUl9UWF9QRlZMQU4JKDEgPDwgIDIpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9IVUdFCSgxIDw8ICAzKQorI2RlZmluZSBETUFfREVTQ1JfVFhfUEFECSgxIDw8ICA0KQorI2RlZmluZSBETUFfREVTQ1JfVFhfQ1JDCSgxIDw8ICA1KQorI2RlZmluZSBETUFfREVTQ1JfVFhfREVTQ1JfSU5UCSgxIDw8IDE0KQorI2RlZmluZSBETUFfREVTQ1JfVFhfUkVUUllfQ09VTlQJMHgwMDBGMDAwMAorI2RlZmluZSBETUFfREVTQ1JfVFhfT05FX0NPTExJU0lPTgkoMSA8PCAyMCkKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX0xBVEVfQ09MTElTSU9OCSgxIDw8IDI0KQorI2RlZmluZSBETUFfREVTQ1JfVFhfVU5ERVJSVU4JCSgxIDw8IDI1KQorI2RlZmluZSBETUFfREVTQ1JfVFhfUkVUUllfTElNSVQJKDEgPDwgMjYpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9PSwkJCSgxIDw8IDMwKQorI2RlZmluZSBETUFfREVTQ1JfVFhfT1dORVIJCSgxIDw8IDMxKQorCisvKiBSWCBETUEgZGVzY3JpcHRvciBzdGF0dXMgYml0cyAqLworI2RlZmluZSBETUFfREVTQ1JfUlhfRU9GCQkoMSA8PCAgMCkKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX1NPRgkJKDEgPDwgIDEpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9WVEYJCSgxIDw8ICAyKQorI2RlZmluZSBETUFfREVTQ1JfUlhfRlJBTUVfSVNfVFlQRQkoMSA8PCAgMykKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX1NIT1JUX0ZSQU1FCSgxIDw8ICA0KQorI2RlZmluZSBETUFfREVTQ1JfUlhfSEFTSF9NQVRDSAkJKDEgPDwgIDcpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9CQURfRlJBTUUJCSgxIDw8ICA4KQorI2RlZmluZSBETUFfREVTQ1JfUlhfT1ZFUlJVTgkJKDEgPDwgIDkpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9NQVhfRlJBTUVfTEVOCSgxIDw8IDExKQorI2RlZmluZSBETUFfREVTQ1JfUlhfQ1JDX0VSUk9SCQkoMSA8PCAxMikKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0RFU0NSX0lOVAkJKDEgPDwgMTMpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9PV05FUgkJKDEgPDwgMTUpCisKKyNkZWZpbmUgUlhfQlVGRkVSX1NJWkUJUEtUU0laRQorI2RlZmluZSBOVU1fUlhfREVTQwlQS1RCVUZTUlgKKworc3RhdGljIHN0cnVjdCBkbWFfZGVzY3JpcHRvciB0eF9kZXNjcmlwdG9yIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOworCitzdGF0aWMgc3RydWN0IGRtYV9kZXNjcmlwdG9yIHJ4X2Rlc2NyX2FycmF5W05VTV9SWF9ERVNDXQorCV9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOworCitzdGF0aWMgc3RydWN0IGRtYV9kZXNjcmlwdG9yICpyeF9kZXNjcl9jdXJyZW50OworCitzdGF0aWMgaW50IHRzaTEwOF9ldGhfcHJvYmUgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKiBiaXMpOworc3RhdGljIGludCB0c2kxMDhfZXRoX3NlbmQgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCisJCQkgICB2b2xhdGlsZSB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpOworc3RhdGljIGludCB0c2kxMDhfZXRoX3JlY3YgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgdHNpMTA4X2V0aF9oYWx0IChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9waHkgKHVuc2lnbmVkIGludCBiYXNlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIsIHVuc2lnbmVkIGludCBwaHlfcmVnKTsKK3N0YXRpYyB2b2lkIHdyaXRlX3BoeSAodW5zaWduZWQgaW50IGJhc2UsCisJCSAgICAgIHVuc2lnbmVkIGludCBwaHlfYWRkciwKKwkJICAgICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCBwaHlfZGF0YSk7CisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMTAwCisvKgorICogcHJpbnQgcGh5IGRlYnVnIGluZm9tYXRpb24KKyAqLworc3RhdGljIHZvaWQgZHVtcF9waHlfcmVncyAodW5zaWduZWQgaW50IHBoeV9hZGRyKQoreworCWludCBpOworCisJcHJpbnRmICgiUEhZICVkIHJlZ2lzdGVyc1xuIiwgcGh5X2FkZHIpOworCWZvciAoaSA9IDA7IGkgPD0gMzA7IGkrKykgeworCQlwcmludGYgKCIlMmQgIDB4JTA0eFxuIiwgaSwgcmVhZF9waHkgKEVUSF9CQVNFLCBwaHlfYWRkciwgaSkpOworCX0KKwlwcmludGYgKCJcbiIpOworCit9CisjZWxzZQorI2RlZmluZSBkdW1wX3BoeV9yZWdzKGJhc2UpIGRve313aGlsZSgwKQorI2VuZGlmCisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMTAwCisvKgorICogcHJpbnQgZGVidWcgaW5mb21hdGlvbgorICovCitzdGF0aWMgdm9pZCB0eF9kaWFnX3JlZ3MgKHVuc2lnbmVkIGludCBiYXNlKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlwcmludGYgKCJUWCBkaWFnbm9zdGljcyByZWdpc3RlcnNcbiIpOworCXJlZ19UWF9ESUFHTk9TVElDX0FERFIoYmFzZSkgPSAweDAwIHwgVFhfRElBR05PU1RJQ19BRERSX0FJOworCXVkZWxheSAoMTAwMCk7CisJZHVtbXkgPSByZWdfVFhfRElBR05PU1RJQ19EQVRBKGJhc2UpOworCWZvciAoaSA9IDB4MDA7IGkgPD0gMHgwNTsgaSsrKSB7CisJCXVkZWxheSAoMTAwMCk7CisJCXByaW50ZiAoIjB4JTAyeCAgMHglMDh4XG4iLCBpLCByZWdfVFhfRElBR05PU1RJQ19EQVRBKGJhc2UpKTsKKwl9CisJcmVnX1RYX0RJQUdOT1NUSUNfQUREUihiYXNlKSA9IDB4NDAgfCBUWF9ESUFHTk9TVElDX0FERFJfQUk7CisJdWRlbGF5ICgxMDAwKTsKKwlkdW1teSA9IHJlZ19UWF9ESUFHTk9TVElDX0RBVEEoYmFzZSk7CisJZm9yIChpID0gMHg0MDsgaSA8PSAweDQ3OyBpKyspIHsKKwkJdWRlbGF5ICgxMDAwKTsKKwkJcHJpbnRmICgiMHglMDJ4ICAweCUwOHhcbiIsIGksIHJlZ19UWF9ESUFHTk9TVElDX0RBVEEoYmFzZSkpOworCX0KKwlwcmludGYgKCJcbiIpOworCit9CisjZWxzZQorI2RlZmluZSB0eF9kaWFnX3JlZ3MoYmFzZSkgZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmIFRTSTEwOF9FVEhfREVCVUcgPiAxMDAKKy8qCisgKiBwcmludCBkZWJ1ZyBpbmZvbWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHJ4X2RpYWdfcmVncyAodW5zaWduZWQgaW50IGJhc2UpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKworCXByaW50ZiAoIlJYIGRpYWdub3N0aWNzIHJlZ2lzdGVyc1xuIik7CisJcmVnX1JYX0RJQUdOT1NUSUNfQUREUihiYXNlKSA9IDB4MDAgfCBSWF9ESUFHTk9TVElDX0FERFJfQUk7CisJdWRlbGF5ICgxMDAwKTsKKwlkdW1teSA9IHJlZ19SWF9ESUFHTk9TVElDX0RBVEEoYmFzZSk7CisJZm9yIChpID0gMHgwMDsgaSA8PSAweDA1OyBpKyspIHsKKwkJdWRlbGF5ICgxMDAwKTsKKwkJcHJpbnRmICgiMHglMDJ4ICAweCUwOHhcbiIsIGksIHJlZ19SWF9ESUFHTk9TVElDX0RBVEEoYmFzZSkpOworCX0KKwlyZWdfUlhfRElBR05PU1RJQ19BRERSKGJhc2UpID0gMHg0MCB8IFJYX0RJQUdOT1NUSUNfQUREUl9BSTsKKwl1ZGVsYXkgKDEwMDApOworCWR1bW15ID0gcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKTsKKwlmb3IgKGkgPSAweDA4OyBpIDw9IDB4MGE7IGkrKykgeworCQl1ZGVsYXkgKDEwMDApOworCQlwcmludGYgKCIweCUwMnggIDB4JTA4eFxuIiwgaSwgcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKSk7CisJfQorCXByaW50ZiAoIlxuIik7CisKK30KKyNlbHNlCisjZGVmaW5lIHJ4X2RpYWdfcmVncyhiYXNlKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDEwMAorLyoKKyAqIHByaW50IGRlYnVnIGluZm9tYXRpb24KKyAqLworc3RhdGljIHZvaWQgZGVidWdfbWlpX3JlZ3MgKHVuc2lnbmVkIGludCBiYXNlKQoreworCXByaW50ZiAoIk1JSV9NR01UX0NPTkZJRyAgICAgMHglMDh4XG4iLCByZWdfTUlJX01HTVRfQ09ORklHKGJhc2UpKTsKKwlwcmludGYgKCJNSUlfTUdNVF9DT01NQU5EICAgIDB4JTA4eFxuIiwgcmVnX01JSV9NR01UX0NPTU1BTkQoYmFzZSkpOworCXByaW50ZiAoIk1JSV9NR01UX0FERFJFU1MgICAgMHglMDh4XG4iLCByZWdfTUlJX01HTVRfQUREUkVTUyhiYXNlKSk7CisJcHJpbnRmICgiTUlJX01HTVRfQ09OVFJPTCAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9DT05UUk9MKGJhc2UpKTsKKwlwcmludGYgKCJNSUlfTUdNVF9TVEFUVVMgICAgIDB4JTA4eFxuIiwgcmVnX01JSV9NR01UX1NUQVRVUyhiYXNlKSk7CisJcHJpbnRmICgiTUlJX01HTVRfSU5ESUNBVE9SUyAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9JTkRJQ0FUT1JTKGJhc2UpKTsKKwlwcmludGYgKCJcbiIpOworCit9CisjZWxzZQorI2RlZmluZSBkZWJ1Z19taWlfcmVncyhiYXNlKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogV2FpdCB1bnRpbCB0aGUgcGh5IGJ1cyBpcyBub24tYnVzeQorICovCitzdGF0aWMgdm9pZCBwaHlfd2FpdCAodW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBjb25kaXRpb24pCit7CisJaW50IHRpbWVvdXQ7CisKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAocmVnX01JSV9NR01UX0lORElDQVRPUlMoYmFzZSkgJiBjb25kaXRpb24pIHsKKwkJdWRlbGF5ICgxMCk7CisJCWlmICgrK3RpbWVvdXQgPiAxMDAwMCkgeworCQkJcHJpbnRmICgiRVJST1I6IHRpbWVvdXQgd2FpdGluZyBmb3IgcGh5IGJ1cyAoJWQpXG4iLAorCQkJICAgICAgIGNvbmRpdGlvbik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIHJlYWQgcGh5IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9waHkgKHVuc2lnbmVkIGludCBiYXNlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIsIHVuc2lnbmVkIGludCBwaHlfcmVnKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXBoeV93YWl0IChiYXNlLCBNSUlfTUdNVF9JTkRJQ0FUT1JTX0JVU1kpOworCisJcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkgPSAocGh5X2FkZHIgPDwgOCkgfCBwaHlfcmVnOworCisJLyogRW5zdXJlIHRoYXQgdGhlIFJlYWQgQ3ljbGUgYml0IGlzIGNsZWFyZWQgcHJpb3IgdG8gbmV4dCByZWFkIGN5Y2xlICovCisJcmVnX01JSV9NR01UX0NPTU1BTkQoYmFzZSkgPSAwOworCisJLyogc3RhcnQgdGhlIHJlYWQgKi8KKwlyZWdfTUlJX01HTVRfQ09NTUFORChiYXNlKSA9IE1JSV9NR01UX0NPTU1BTkRfUkVBRF9DWUNMRTsKKworCS8qIHdhaXQgZm9yIHRoZSByZWFkIHRvIGNvbXBsZXRlICovCisJcGh5X3dhaXQgKGJhc2UsCisJCSBNSUlfTUdNVF9JTkRJQ0FUT1JTX05PVF9WQUxJRCB8IE1JSV9NR01UX0lORElDQVRPUlNfQlVTWSk7CisKKwl2YWx1ZSA9IHJlZ19NSUlfTUdNVF9TVEFUVVMoYmFzZSk7CisKKwlyZWdfTUlJX01HTVRfQ09NTUFORChiYXNlKSA9IDA7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiB3cml0ZSBwaHkgcmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgd3JpdGVfcGh5ICh1bnNpZ25lZCBpbnQgYmFzZSwKKwkJICAgICAgdW5zaWduZWQgaW50IHBoeV9hZGRyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgcGh5X3JlZywgdW5zaWduZWQgaW50IHBoeV9kYXRhKQoreworCXBoeV93YWl0IChiYXNlLCBNSUlfTUdNVF9JTkRJQ0FUT1JTX0JVU1kpOworCisJcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkgPSAocGh5X2FkZHIgPDwgOCkgfCBwaHlfcmVnOworCisJLyogRW5zdXJlIHRoYXQgdGhlIFJlYWQgQ3ljbGUgYml0IGlzIGNsZWFyZWQgcHJpb3IgdG8gbmV4dCBjeWNsZSAqLworCXJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpID0gMDsKKworCS8qIHN0YXJ0IHRoZSB3cml0ZSAqLworCXJlZ19NSUlfTUdNVF9DT05UUk9MKGJhc2UpID0gcGh5X2RhdGE7Cit9CisKKy8qCisgKiBjb25maWd1cmUgdGhlIG1hcnZlbGwgODhlMTExMSBwaHkKKyAqLworc3RhdGljIGludCBtYXJ2ZWxsXzg4ZV9waHlfY29uZmlnIChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBpbnQgKnNwZWVkLAorCQkJCSAgaW50ICpkdXBsZXgpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgcGh5X2FkZHI7CisJdW5zaWduZWQgaW50IHBoeV9zdGF0dXM7CisJdW5zaWduZWQgaW50IHBoeV9zcGVjX3N0YXR1czsKKwlpbnQgdGltZW91dDsKKwlpbnQgcGh5X3NwZWVkOworCWludCBwaHlfZHVwbGV4OworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXBoeV9zcGVlZCA9IExJTktfU1BFRURfVU5LTk9XTjsKKwlwaHlfZHVwbGV4ID0gTElOS19EVVBMRVhfVU5LTk9XTjsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKwlwaHlfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRldi0+cHJpdjsKKworCS8qIFRha2UgdGhlIFBIWSBvdXQgb2YgcmVzZXQuICovCisJd3JpdGVfcGh5IChFVEhfQkFTRSwgcGh5X2FkZHIsIFBIWV9DVFJMX1JFRywgUEhZX0NUUkxfUkVTRVQpOworCisJLyogV2FpdCBmb3IgdGhlIHJlc2V0IHByb2Nlc3MgdG8gY29tcGxldGUuICovCisJdWRlbGF5ICgxMCk7CisJdGltZW91dCA9IDA7CisJd2hpbGUgKChwaHlfc3RhdHVzID0KKwkJcmVhZF9waHkgKEVUSF9CQVNFLCBwaHlfYWRkciwgUEhZX0NUUkxfUkVHKSkgJiBQSFlfQ1RSTF9SRVNFVCkgeworCQl1ZGVsYXkgKDEwKTsKKwkJaWYgKCsrdGltZW91dCA+IDEwMDAwKSB7CisJCQlwcmludGYgKCJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBwaHkgcmVzZXRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBUQkkgQ29uZmlndXJhdGlvbi4gKi8KKwl3cml0ZV9waHkgKGJhc2UsIFRCSV9BRERSLCBUQklfQ09OVFJPTF8yLCBUQklfQ09OVFJPTF8yX0dfTUlJX01PREUgfAorCQkgIFRCSV9DT05UUk9MXzJfUkVDRUlWRV9DTE9DS19TRUxFQ1QpOworCS8qIFdhaXQgZm9yIHRoZSBsaW5rIHRvIGJlIGVzdGFibGlzaGVkLiAqLworCXRpbWVvdXQgPSAwOworCWRvIHsKKwkJdWRlbGF5ICgyMDAwMCk7CisJCXBoeV9zdGF0dXMgPSByZWFkX3BoeSAoRVRIX0JBU0UsIHBoeV9hZGRyLCBQSFlfU1RBVFVTX1JFRyk7CisJCWlmICgrK3RpbWVvdXQgPiAxMDApIHsKKwkJCWRlYnVnX2xldigxLCAiRVJST1I6IHVuYWJsZSB0byBlc3RhYmxpc2ggbGluayEhIVxuIik7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKChwaHlfc3RhdHVzICYgUEhZX1NUQVRfTElOS19VUCkgPT0gMCk7CisKKwlpZiAoKHBoeV9zdGF0dXMgJiBQSFlfU1RBVF9MSU5LX1VQKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXZhbHVlID0gMDsKKwlwaHlfc3BlY19zdGF0dXMgPSByZWFkX3BoeSAoRVRIX0JBU0UsIHBoeV9hZGRyLCBNVjExMTFfU1BFQ19TVEFUX1JFRyk7CisJaWYgKHBoeV9zcGVjX3N0YXR1cyAmIFNQRUNfU1RBVF9SRVNPTFZFRCkgeworCQlzd2l0Y2ggKHBoeV9zcGVjX3N0YXR1cyAmIFNQRUNfU1RBVF9TUEVFRF9NQVNLKSB7CisJCWNhc2UgU1BFRURfMTAwMDoKKwkJCXBoeV9zcGVlZCA9IExJTktfU1BFRURfMTAwMDsKKwkJCXZhbHVlIHw9IFBIWV9DVFJMX1NQRUVEMTsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDoKKwkJCXBoeV9zcGVlZCA9IExJTktfU1BFRURfMTAwOworCQkJdmFsdWUgfD0gUEhZX0NUUkxfU1BFRUQwOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTA6CisJCQlwaHlfc3BlZWQgPSBMSU5LX1NQRUVEXzEwOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBoeV9zcGVjX3N0YXR1cyAmIFNQRUNfU1RBVF9GVUxMX0RVUCkgeworCQkJcGh5X2R1cGxleCA9IExJTktfRFVQTEVYX0ZVTEw7CisJCQl2YWx1ZSB8PSBQSFlfQ1RSTF9GVUxMX0RVUExFWDsKKwkJfSBlbHNlCisJCQlwaHlfZHVwbGV4ID0gTElOS19EVVBMRVhfSEFMRjsKKwl9CisJLyogc2V0IFRCSSBzcGVlZCAqLworCXdyaXRlX3BoeSAoYmFzZSwgVEJJX0FERFIsIFBIWV9DVFJMX1JFRywgdmFsdWUpOworCXdyaXRlX3BoeSAoYmFzZSwgVEJJX0FERFIsIFBIWV9BTl9BRFZfUkVHLCAweDAwNjApOworCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDAKKwlwcmludGYgKCIlcyBsaW5rIGlzIHVwIiwgZGV2LT5uYW1lKTsKKwlwaHlfc3BlY19zdGF0dXMgPSByZWFkX3BoeSAoRVRIX0JBU0UsIHBoeV9hZGRyLCBNVjExMTFfU1BFQ19TVEFUX1JFRyk7CisJaWYgKHBoeV9zcGVjX3N0YXR1cyAmIFNQRUNfU1RBVF9SRVNPTFZFRCkgeworCQlzd2l0Y2ggKHBoeV9zcGVlZCkgeworCQljYXNlIExJTktfU1BFRURfMTAwMDoKKwkJCXByaW50ZiAoIiwgMTAwMCBNYnBzIik7CisJCQlicmVhazsKKwkJY2FzZSBMSU5LX1NQRUVEXzEwMDoKKwkJCXByaW50ZiAoIiwgMTAwIE1icHMiKTsKKwkJCWJyZWFrOworCQljYXNlIExJTktfU1BFRURfMTA6CisJCQlwcmludGYgKCIsIDEwIE1icHMiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwaHlfZHVwbGV4ID09IExJTktfRFVQTEVYX0ZVTEwpCisJCQlwcmludGYgKCIsIEZ1bGwgZHVwbGV4Iik7CisJCWVsc2UKKwkJCXByaW50ZiAoIiwgSGFsZiBkdXBsZXgiKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKKyNlbmRpZgorCisJZHVtcF9waHlfcmVncyAoVEJJX0FERFIpOworCWlmIChzcGVlZCkKKwkJKnNwZWVkID0gcGh5X3NwZWVkOworCWlmIChkdXBsZXgpCisJCSpkdXBsZXggPSBwaHlfZHVwbGV4OworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBFeHRlcm5hbCBpbnRlcmZhY2UKKyAqCisgKiByZWdpc3RlciB0aGUgdHNpMTA4IGV0aGVybmV0IGNvbnRyb2xsZXJzIHdpdGggdGhlIG11bHRpLWV0aGVybmV0IHN5c3RlbQorICovCitpbnQgdHNpMTA4X2V0aF9pbml0aWFsaXplIChiZF90ICogYmlzKQoreworCXN0cnVjdCBldGhfZGV2aWNlICpkZXY7CisJaW50IGluZGV4OworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTOyBpbmRleCsrKSB7CisJCWRldiA9IChzdHJ1Y3QgZXRoX2RldmljZSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGV0aF9kZXZpY2UpKTsKKworCQlzcHJpbnRmIChkZXYtPm5hbWUsICJUU0kxMDhfZXRoJWQiLCBpbmRleCk7CisKKwkJZGV2LT5pb2Jhc2UgPSBFVEhfQkFTRSArIChpbmRleCAqIEVUSF9QT1JUX09GRlNFVCk7CisJCWRldi0+cHJpdiA9ICh2b2lkICopKHBoeV9hZGRyZXNzW2luZGV4XSk7CisJCWRldi0+aW5pdCA9IHRzaTEwOF9ldGhfcHJvYmU7CisJCWRldi0+aGFsdCA9IHRzaTEwOF9ldGhfaGFsdDsKKwkJZGV2LT5zZW5kID0gdHNpMTA4X2V0aF9zZW5kOworCQlkZXYtPnJlY3YgPSB0c2kxMDhfZXRoX3JlY3Y7CisKKwkJZXRoX3JlZ2lzdGVyKGRldik7CisJfQorCXJldHVybiBpbmRleDsKK30KKworLyoKKyAqIHByb2JlIGZvciBhbmQgaW5pdGlhbGl6ZSBhIHNpbmdsZSBldGhlcm5ldCBpbnRlcmZhY2UKKyAqLworc3RhdGljIGludCB0c2kxMDhfZXRoX3Byb2JlIChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBiZF90ICogYmlzKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBpbmRleDsKKwlzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKnR4X2Rlc2NyOworCXN0cnVjdCBkbWFfZGVzY3JpcHRvciAqcnhfZGVzY3I7CisJaW50IHNwZWVkOworCWludCBkdXBsZXg7CisKKwliYXNlID0gZGV2LT5pb2Jhc2U7CisKKwlyZWdfUE9SVF9DT05UUk9MKGJhc2UpID0gUE9SVF9DT05UUk9MX1NURSB8IFBPUlRfQ09OVFJPTF9CUFQ7CisKKwkvKiBCcmluZyBETUEvRklGTyBvdXQgb2YgcmVzZXQuICovCisJcmVnX1RYX0NPTkZJRyhiYXNlKSA9IDB4MDAwMDAwMDA7CisJcmVnX1JYX0NPTkZJRyhiYXNlKSA9IDB4MDAwMDAwMDA7CisKKwlyZWdfVFhfVEhSRVNIT0xEUyhiYXNlKSA9ICgxOTIgPDwgMTYpIHwgMTkyOworCXJlZ19SWF9USFJFU0hPTERTKGJhc2UpID0gKDE5MiA8PCAxNikgfCAxMTI7CisKKwkvKiBCcmluZyBNQUMgb3V0IG9mIHJlc2V0LiAqLworCXJlZ19NQUNfQ09ORklHXzEoYmFzZSkgPSAweDAwMDAwMDAwOworCisJLyogRE1BIE1BQyBjb25maWd1cmF0aW9uLiAqLworCXJlZ19NQUNfQ09ORklHXzEoYmFzZSkgPQorCSAgICBNQUNfQ09ORklHXzFfUlhfRU5BQkxFIHwgTUFDX0NPTkZJR18xX1RYX0VOQUJMRTsKKworCXJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkgPSBNSUlfTUdNVF9DT05GSUdfTk9fUFJFQU1CTEU7CisJcmVnX01BWElNVU1fRlJBTUVfTEVOR1RIKGJhc2UpID0gUlhfQlVGRkVSX1NJWkU7CisKKwkvKiBOb3RlOiBFYXJseSB0c2kxMDggbWFudWFsIGRpZCBub3QgaGF2ZSBjb3JyZWN0IGJ5dGUgb3JkZXIKKwkgKiBmb3IgdGhlIHN0YXRpb24gYWRkcmVzcy4qLworCXJlZ19TVEFUSU9OX0FERFJFU1NfMShiYXNlKSA9IChkZXYtPmVuZXRhZGRyWzVdIDw8IDI0KSB8CisJICAgIChkZXYtPmVuZXRhZGRyWzRdIDw8IDE2KSB8CisJICAgIChkZXYtPmVuZXRhZGRyWzNdIDw8IDgpIHwgKGRldi0+ZW5ldGFkZHJbMl0gPDwgMCk7CisKKwlyZWdfU1RBVElPTl9BRERSRVNTXzIoYmFzZSkgPSAoZGV2LT5lbmV0YWRkclsxXSA8PCAyNCkgfAorCSAgICAoZGV2LT5lbmV0YWRkclswXSA8PCAxNik7CisKKwlpZiAobWFydmVsbF84OGVfcGh5X2NvbmZpZyhkZXYsICZzcGVlZCwgJmR1cGxleCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2YWx1ZSA9CisJICAgIE1BQ19DT05GSUdfMl9QUkVBTUJMRV9MRU5HVEgoNykgfCBNQUNfQ09ORklHXzJfUEFEX0NSQyB8CisJICAgIE1BQ19DT05GSUdfMl9DUkNfRU5BQkxFOworCWlmIChzcGVlZCA9PSBMSU5LX1NQRUVEXzEwMDApCisJCXZhbHVlIHw9IE1BQ19DT05GSUdfMl9JTlRFUkZBQ0VfTU9ERShJTlRFUkZBQ0VfTU9ERV9CWVRFKTsKKwllbHNlIHsKKwkJdmFsdWUgfD0gTUFDX0NPTkZJR18yX0lOVEVSRkFDRV9NT0RFKElOVEVSRkFDRV9NT0RFX05JQkJMRSk7CisJCXJlZ19QT1JUX0NPTlRST0woYmFzZSkgfD0gUE9SVF9DT05UUk9MX1NQRDsKKwl9CisJaWYgKGR1cGxleCA9PSBMSU5LX0RVUExFWF9GVUxMKSB7CisJCXZhbHVlIHw9IE1BQ19DT05GSUdfMl9GVUxMX0RVUExFWDsKKwkJcmVnX1BPUlRfQ09OVFJPTChiYXNlKSAmPSB+UE9SVF9DT05UUk9MX0JQVDsKKwl9IGVsc2UKKwkJcmVnX1BPUlRfQ09OVFJPTChiYXNlKSB8PSBQT1JUX0NPTlRST0xfQlBUOworCXJlZ19NQUNfQ09ORklHXzIoYmFzZSkgPSB2YWx1ZTsKKworCXJlZ19SWF9DT05GSUcoYmFzZSkgPSBSWF9DT05GSUdfU0U7CisJcmVnX1JYX1FVRVVFXzBfQ09ORklHKGJhc2UpID0gT0NOX1BPUlRfTUVNT1JZOworCXJlZ19SWF9RVUVVRV8wX0JVRl9DT05GSUcoYmFzZSkgPSBPQ05fUE9SVF9NRU1PUlk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBSWCBETUEgZGVzY3JpcHRvcnMgKi8KKwlyeF9kZXNjciA9ICZyeF9kZXNjcl9hcnJheVswXTsKKwlyeF9kZXNjcl9jdXJyZW50ID0gcnhfZGVzY3I7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX1JYX0RFU0M7IGluZGV4KyspIHsKKwkJLyogbWFrZSBzdXJlIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXJlIG5vdCBpbiBjYWNoZSAqLworCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylOZXRSeFBhY2tldHNbaW5kZXhdLAorCQkJCQkodW5zaWduZWQgbG9uZylOZXRSeFBhY2tldHNbaW5kZXhdICsKKwkJCQkJUlhfQlVGRkVSX1NJWkUpOworCQlyeF9kZXNjci0+c3RhcnRfYWRkcjAgPQorCQkgICAgY3B1X3RvX2xlMzIoKHZ1aW50MzIpIE5ldFJ4UGFja2V0c1tpbmRleF0pOworCQlyeF9kZXNjci0+c3RhcnRfYWRkcjEgPSAwOworCQlyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCA9CisJCSAgICBjcHVfdG9fbGUzMigodnVpbnQzMikgKHJ4X2Rlc2NyICsgMSkpOworCQlyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMSA9IDA7CisJCXJ4X2Rlc2NyLT52bGFuX2J5dGVfY291bnQgPSAwOworCQlyeF9kZXNjci0+Y29uZmlnX3N0YXR1cyA9IGNwdV90b19sZTMyKChSWF9CVUZGRVJfU0laRSA8PCAxNikgfAorCQkJCQkJICAgICAgRE1BX0RFU0NSX1JYX09XTkVSKTsKKwkJcnhfZGVzY3IrKzsKKwl9CisJcnhfZGVzY3ItLTsKKwlyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCA9IDA7CisJcnhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjEgPSBjcHVfdG9fbGUzMihETUFfREVTQ1JfTEFTVCk7CisJLyogUHVzaCB0aGUgZGVzY3JpcHRvcnMgdG8gUkFNIHNvIHRoZSBldGhlcm5ldCBETUEgY2FuIHNlZSB0aGVtICovCisJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcnhfZGVzY3JfYXJyYXksCisJCQkJKHVuc2lnbmVkIGxvbmcpcnhfZGVzY3JfYXJyYXkgKworCQkJCXNpemVvZihyeF9kZXNjcl9hcnJheSkpOworCisJLyogZW5hYmxlIFJYIHF1ZXVlICovCisJcmVnX1JYX0NPTlRST0woYmFzZSkgPSBUWF9DT05UUk9MX0dPIHwgMHgwMTsKKwlyZWdfUlhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpID0gKHUzMikgcnhfZGVzY3JfY3VycmVudDsKKwkvKiBlbmFibGUgcmVjZWl2ZSBETUEgKi8KKwlyZWdfUlhfUVVFVUVfMF9QVFJfSElHSChiYXNlKSA9IFJYX1FVRVVFXzBfUFRSX0hJR0hfVkFMSUQ7CisKKwlyZWdfVFhfUVVFVUVfMF9DT05GSUcoYmFzZSkgPSBPQ05fUE9SVF9NRU1PUlk7CisJcmVnX1RYX1FVRVVFXzBfQlVGX0NPTkZJRyhiYXNlKSA9IE9DTl9QT1JUX01FTU9SWTsKKworCS8qIGluaXRpYWxpemUgdGhlIFRYIERNQSBkZXNjcmlwdG9yICovCisJdHhfZGVzY3IgPSAmdHhfZGVzY3JpcHRvcjsKKworCXR4X2Rlc2NyLT5zdGFydF9hZGRyMCA9IDA7CisJdHhfZGVzY3ItPnN0YXJ0X2FkZHIxID0gMDsKKwl0eF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCA9IDA7CisJdHhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjEgPSBjcHVfdG9fbGUzMihETUFfREVTQ1JfTEFTVCk7CisJdHhfZGVzY3ItPnZsYW5fYnl0ZV9jb3VudCA9IDA7CisJdHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgPSBjcHVfdG9fbGUzMihETUFfREVTQ1JfVFhfT0sgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfU09GIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX0VPRik7CisJLyogZW5hYmxlIFRYIHF1ZXVlICovCisJcmVnX1RYX0NPTlRST0woYmFzZSkgPSBUWF9DT05UUk9MX0dPIHwgMHgwMTsKKworCXJldHVybiAxOworfQorCisvKgorICogc2VuZCBhIHBhY2tldAorICovCitzdGF0aWMgaW50IHRzaTEwOF9ldGhfc2VuZCAoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwKKwkJCSAgIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IHRpbWVvdXQ7CisJc3RydWN0IGRtYV9kZXNjcmlwdG9yICp0eF9kZXNjcjsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKwl0eF9kZXNjciA9ICZ0eF9kZXNjcmlwdG9yOworCisJLyogV2FpdCB1bnRpbCB0aGUgbGFzdCBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQuICovCisJdGltZW91dCA9IDA7CisJZG8geworCQkvKiBtYWtlIHN1cmUgd2Ugc2VlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIERNQSBlbmdpbmUgKi8KKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdHhfZGVzY3IsCisJCQkJCSh1bnNpZ25lZCBsb25nKXR4X2Rlc2NyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkbWFfZGVzY3JpcHRvcikpOworCisJCWlmICh0aW1lb3V0ICE9IDApCisJCQl1ZGVsYXkgKDE1KTsKKwkJaWYgKCsrdGltZW91dCA+IDEwMDAwKSB7CisJCQl0eF9kaWFnX3JlZ3MoYmFzZSk7CisJCQlkZWJ1Z19sZXYoMSwKKwkJCQkgICJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBsYXN0IHRyYW5zbWl0IHBhY2tldCB0byBiZSBzZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAodHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgJiBjcHVfdG9fbGUzMihETUFfREVTQ1JfVFhfT1dORVIpKTsKKworCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2NyLT5jb25maWdfc3RhdHVzKTsKKwlpZiAoKHN0YXR1cyAmIERNQV9ERVNDUl9UWF9PSykgPT0gMCkgeworI2lmZGVmIFRYX1BSSU5UX0VSUk9SUworCQlwcmludGYgKCJUWCBwYWNrZXQgZXJyb3I6IDB4JTA4eFxuICAgICVzJXMlcyVzXG4iLCBzdGF0dXMsCisJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfVFhfT0sgPyAidHggZXJyb3IsICIgOiAiIiwKKwkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9SRVRSWV9MSU1JVCA/CisJCSAgICAgICAicmV0cnkgbGltaXQgcmVhY2hlZCwgIiA6ICIiLAorCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1RYX1VOREVSUlVOID8gInVuZGVycnVuLCAiIDogIiIsCisJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfVFhfTEFURV9DT0xMSVNJT04gPyAibGF0ZSBjb2xsaXNpb24sICIKKwkJICAgICAgIDogIiIpOworI2VuZGlmCisJfQorCisJZGVidWdfbGV2ICg5LCAic2VuZGluZyBwYWNrZXQgJWRcbiIsIGxlbmd0aCk7CisJdHhfZGVzY3ItPnN0YXJ0X2FkZHIwID0gY3B1X3RvX2xlMzIoKHZ1aW50MzIpIHBhY2tldCk7CisJdHhfZGVzY3ItPnN0YXJ0X2FkZHIxID0gMDsKKwl0eF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCA9IDA7CisJdHhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjEgPSBjcHVfdG9fbGUzMihETUFfREVTQ1JfTEFTVCk7CisJdHhfZGVzY3ItPnZsYW5fYnl0ZV9jb3VudCA9IGNwdV90b19sZTMyKGxlbmd0aCk7CisJdHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgPSBjcHVfdG9fbGUzMihETUFfREVTQ1JfVFhfT1dORVIgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfQ1JDIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX1BBRCB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9TT0YgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfRU9GKTsKKworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXR4X2Rlc2NyLAorCQkJCSh1bnNpZ25lZCBsb25nKXR4X2Rlc2NyICsKKwkJCQlzaXplb2Yoc3RydWN0IGRtYV9kZXNjcmlwdG9yKSk7CisKKwlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwYWNrZXQsCisJCQkJKHVuc2lnbmVkIGxvbmcpcGFja2V0ICsgbGVuZ3RoKTsKKworCXJlZ19UWF9RVUVVRV8wX1BUUl9MT1coYmFzZSkgPSAodTMyKSB0eF9kZXNjcjsKKwlyZWdfVFhfUVVFVUVfMF9QVFJfSElHSChiYXNlKSA9IFRYX1FVRVVFXzBfUFRSX0hJR0hfVkFMSUQ7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKgorICogQ2hlY2sgZm9yIHJlY2VpdmVkIHBhY2tldHMgYW5kIHNlbmQgdGhlbSB1cCB0aGUgcHJvdG9jYWwgc3RhY2sKKyAqLworc3RhdGljIGludCB0c2kxMDhfZXRoX3JlY3YgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRtYV9kZXNjcmlwdG9yICpyeF9kZXNjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IGxlbmd0aCA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdm9sYXRpbGUgdWNoYXIgKmJ1ZmZlcjsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBzZWUgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgRE1BIGVuZ2luZSAqLworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlICgodW5zaWduZWQgbG9uZylyeF9kZXNjcl9hcnJheSwKKwkJCQkodW5zaWduZWQgbG9uZylyeF9kZXNjcl9hcnJheSArCisJCQkJc2l6ZW9mKHJ4X2Rlc2NyX2FycmF5KSk7CisKKwkvKiBwcm9jZXNzIGFsbCBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0cyAqLworCXJ4X2Rlc2NyID0gcnhfZGVzY3JfY3VycmVudDsKKwl3aGlsZSAoKHJ4X2Rlc2NyLT5jb25maWdfc3RhdHVzICYgY3B1X3RvX2xlMzIoRE1BX0RFU0NSX1JYX09XTkVSKSkgPT0gMCkgeworCQkvKiBjaGVjayBmb3IgZXJyb3IgKi8KKwkJc3RhdHVzID0gbGUzMl90b19jcHUocnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMpOworCQlpZiAoc3RhdHVzICYgRE1BX0RFU0NSX1JYX0JBRF9GUkFNRSkgeworI2lmZGVmIFJYX1BSSU5UX0VSUk9SUworCQkJcHJpbnRmICgiUlggcGFja2V0IGVycm9yOiAweCUwOHhcbiAgICAlcyVzJXMlcyVzJXNcbiIsCisJCQkgICAgICAgc3RhdHVzLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9GUkFNRV9JU19UWVBFID8gInRvbyBiaWcsICIKKwkJCSAgICAgICA6ICIiLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9TSE9SVF9GUkFNRSA/ICJ0b28gc2hvcnQsICIKKwkJCSAgICAgICA6ICIiLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9CQURfRlJBTUUgPyAiYmFkIGZyYW1lLCAiIDoKKwkJCSAgICAgICAiIiwKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfT1ZFUlJVTiA/ICJvdmVycnVuLCAiIDogIiIsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX01BWF9GUkFNRV9MRU4gPworCQkJICAgICAgICJtYXggbGVuZ3RoLCAiIDogIiIsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX0NSQ19FUlJPUiA/ICJDUkMgZXJyb3IsICIgOgorCQkJICAgICAgICIiKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJbGVuZ3RoID0KKwkJCSAgICBsZTMyX3RvX2NwdShyeF9kZXNjci0+dmxhbl9ieXRlX2NvdW50KSAmIDB4RkZGRjsKKworCQkJLyoqKiBwcm9jZXNzIHBhY2tldCAqKiovCisJCQlidWZmZXIgPQorCQkJICAgICh2b2xhdGlsZSB1Y2hhcgorCQkJICAgICAqKShsZTMyX3RvX2NwdSAocnhfZGVzY3ItPnN0YXJ0X2FkZHIwKSk7CisJCQlOZXRSZWNlaXZlIChidWZmZXIsIGxlbmd0aCk7CisKKwkJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlICgodW5zaWduZWQgbG9uZylidWZmZXIsCisJCQkJCQkodW5zaWduZWQgbG9uZylidWZmZXIgKworCQkJCQkJUlhfQlVGRkVSX1NJWkUpOworCQl9CisJCS8qIEdpdmUgdGhpcyBidWZmZXIgYmFjayB0byB0aGUgRE1BIGVuZ2luZSAqLworCQlyeF9kZXNjci0+dmxhbl9ieXRlX2NvdW50ID0gMDsKKwkJcnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgPSBjcHVfdG9fbGUzMiAoKFJYX0JVRkZFUl9TSVpFIDw8IDE2KSB8CisJCQkJCQkgICAgICBETUFfREVTQ1JfUlhfT1dORVIpOworCQkvKiBtb3ZlIGRlc2NyaXB0b3IgcG9pbnRlciBmb3J3YXJkICovCisJCXJ4X2Rlc2NyID0KKwkJICAgIChzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IKKwkJICAgICAqKShsZTMyX3RvX2NwdSAocnhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjApKTsKKwkJaWYgKHJ4X2Rlc2NyID09IDApCisJCQlyeF9kZXNjciA9ICZyeF9kZXNjcl9hcnJheVswXTsKKwl9CisJLyogcmVtZW1iZXIgd2hlcmUgd2UgYXJlIGZvciBuZXh0IHRpbWUgKi8KKwlyeF9kZXNjcl9jdXJyZW50ID0gcnhfZGVzY3I7CisKKwkvKiBJZiB0aGUgRE1BIGVuZ2luZSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBxdWV1ZQorCSAqIHN0YXJ0IG92ZXIgYXQgdGhlIGJlZ2luaW5nICovCisJaWYgKHJlZ19SWF9FWFRFTkRFRF9TVEFUVVMoYmFzZSkgJiBSWF9FWFRFTkRFRF9TVEFUVVNfRU9RXzApIHsKKworCQlyZWdfUlhfRVhURU5ERURfU1RBVFVTKGJhc2UpID0gUlhfRVhURU5ERURfU1RBVFVTX0VPUV8wOworCQlyZWdfUlhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpID0gKHUzMikgJiByeF9kZXNjcl9hcnJheVswXTsKKwkJcmVnX1JYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkgPSBSWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElEOworCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKKy8qCisgKiBkaXNhYmxlIGFuIGV0aGVybmV0IGludGVyZmFjZQorICovCitzdGF0aWMgdm9pZCB0c2kxMDhfZXRoX2hhbHQgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCisJYmFzZSA9IGRldi0+aW9iYXNlOworCisJLyogUHV0IERNQS9GSUZPIGludG8gcmVzZXQgc3RhdGUuICovCisJcmVnX1RYX0NPTkZJRyhiYXNlKSA9IFRYX0NPTkZJR19SU1Q7CisJcmVnX1JYX0NPTkZJRyhiYXNlKSA9IFJYX0NPTkZJR19SU1Q7CisKKwkvKiBQdXQgTUFDIGludG8gcmVzZXQgc3RhdGUuICovCisJcmVnX01BQ19DT05GSUdfMShiYXNlKSA9IE1BQ19DT05GSUdfMV9TT0ZUX1JFU0VUOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHNpMTA4X2kyYy5jIGIvZHJpdmVycy90c2kxMDhfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1MmNiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHNpMTA4X2kyYy5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0IFR1bmRyYSBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBdXRob3I6IEFsZXggQm91bmluZQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZiBDT05GSUdfVFNJMTA4X0kyQworI2luY2x1ZGUgPHRzaTEwOC5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKQorCisjZGVmaW5lIEkyQ19ERUxBWQkxMDAwMDAKKyN1bmRlZiAgREVCVUdfSTJDCisKKyNpZmRlZiBERUJVR19JMkMKKyNkZWZpbmUgRFBSSU5UKHgpIHByaW50ZiAoeCkKKyNlbHNlCisjZGVmaW5lIERQUklOVCh4KQorI2VuZGlmCisKKy8qIEFsbCBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgVHNpMTA4IEkyQyBibG9jayBpcyB0aGUgb25seSBtYXN0ZXIgb24gdGhlIGJ1cyAqLworLyogSTJDIHJlYWQgaGVscGVyIGZ1bmN0aW9uICovCisKK3N0YXRpYyBpbnQgaTJjX3JlYWRfYnl0ZSAoCisJCXVpbnQgaTJjX2NoYW4sCS8qIEkyQyBjaGFubmVsIG51bWJlcjogMCAtIG1haW4sIDEgLSBTREMgU1BEICovCisJCXVjaGFyIGNoaXBfYWRkciwvKiBJMkMgZGV2aWNlIGFkZHJlc3Mgb24gdGhlIGJ1cyAqLworCQl1aW50IGJ5dGVfYWRkciwJLyogQnl0ZSBhZGRyZXNzIHdpdGhpbiBJMkMgZGV2aWNlICovCisJCXVjaGFyICogYnVmZmVyCS8qIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKi8KKwkJKQoreworCXUzMiB0ZW1wOworCXUzMiB0b19jb3VudCA9IEkyQ19ERUxBWTsKKwl1MzIgb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19USU1FT1VUX0VSUjsKKwl1MzIgY2hhbl9vZmZzZXQgPSBUU0kxMDhfSTJDX09GRlNFVDsKKworCURQUklOVCAoKCJJMkMgcmVhZF9ieXRlKCkgJWQgMHglMDJ4IDB4JTAyeFxuIiwKKwkJaTJjX2NoYW4sIGNoaXBfYWRkciwgYnl0ZV9hZGRyKSk7CisKKwlpZiAoMCAhPSBpMmNfY2hhbikKKwkJY2hhbl9vZmZzZXQgPSBUU0kxMDhfSTJDX1NEUkFNX09GRlNFVDsKKworCS8qIENoZWNrIGlmIEkyQyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgKi8KKwl0ZW1wID0gKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArIEkyQ19DTlRSTDIpOworCisJaWYgKDAgPT0gKHRlbXAgJiAoSTJDX0NOVFJMMl9SRF9TVEFUVVMgfCBJMkNfQ05UUkwyX1dSX1NUQVRVUyB8CisJCQkgIEkyQ19DTlRSTDJfU1RBUlQpKSkgeworCQkvKiBTZXQgZGV2aWNlIGFkZHJlc3MgYW5kIG9wZXJhdGlvbiAocmVhZCA9IDApICovCisJCXRlbXAgPSAoYnl0ZV9hZGRyIDw8IDE2KSB8ICgoY2hpcF9hZGRyICYgMHgwNykgPDwgOCkgfAorCQkgICAgKChjaGlwX2FkZHIgPj4gMykgJiAweDBGKTsKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArIEkyQ19DTlRSTDEpID0KKwkJICAgIHRlbXA7CisKKwkJLyogSXNzdWUgdGhlIHJlYWQgY29tbWFuZAorCQkgKiAoYXQgdGhpcyBtb21lbnQgYWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIDAKKwkJICogKHNpemUgPSAxIGJ5dGUsIGxhbmUgPSAwKQorCQkgKi8KKworCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIGNoYW5fb2Zmc2V0ICsgSTJDX0NOVFJMMikgPQorCQkgICAgKEkyQ19DTlRSTDJfU1RBUlQpOworCisJCS8qIFdhaXQgdW50aWwgb3BlcmF0aW9uIGNvbXBsZXRlZCAqLworCQlkbyB7CisJCQkvKiBSZWFkIEkyQyBvcGVyYXRpb24gc3RhdHVzICovCisJCQl0ZW1wID0gKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArIEkyQ19DTlRSTDIpOworCisJCQlpZiAoMCA9PSAodGVtcCAmIChJMkNfQ05UUkwyX1JEX1NUQVRVUyB8IEkyQ19DTlRSTDJfU1RBUlQpKSkgeworCQkJCWlmICgwID09ICh0ZW1wICYKKwkJCQkgICAgIChJMkNfQ05UUkwyX0kyQ19DRkdFUlIgfAorCQkJCSAgICAgIEkyQ19DTlRSTDJfSTJDX1RPX0VSUikpCisJCQkJICAgICkgeworCQkJCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1NVQ0NFU1M7CisKKwkJCQkJdGVtcCA9ICoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkJCQkgY2hhbl9vZmZzZXQgKworCQkJCQkJCSBJMkNfUkRfREFUQSk7CisKKwkJCQkJKmJ1ZmZlciA9ICh1OCkgKHRlbXAgJiAweEZGKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiByZXBvcnQgSFcgZXJyb3IgKi8KKwkJCQkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19JRl9FUlJPUjsKKworCQkJCQlEUFJJTlQgKCgiSTJDIEhXIGVycm9yIHJlcG9ydGVkOiAweCUwMnhcbiIsIHRlbXApKTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAodG9fY291bnQtLSk7CisJfSBlbHNlIHsKKwkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19JRl9CVVNZOworCisJCURQUklOVCAoKCJJMkMgVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHRlbXApKTsKKwl9CisKKwlEUFJJTlQgKCgiSTJDIHJlYWRfYnl0ZSgpIHN0YXR1czogMHglMDJ4XG4iLCBvcF9zdGF0dXMpKTsKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKgorICogSTJDIFJlYWQgaW50ZXJmYWNlIGFzIGRlZmluZWQgaW4gImluY2x1ZGUvaTJjLmgiIDoKKyAqICAgY2hpcF9hZGRyOiBJMkMgY2hpcCBhZGRyZXNzLCByYW5nZSAwLi4xMjcKKyAqICAgICAgICAgICAgICAgICAgKHRvIHJlYWQgZnJvbSBTUEQgY2hhbm5lbCBFRVBST00gdXNlICgweEQwIC4uLiAweEQ3KQorICogICAgICAgICAgICAgIE5PVEU6IFRoZSBiaXQgNyBpbiB0aGUgY2hpcF9hZGRyIHNlcnZlcyBhcyBhIGNoYW5uZWwgc2VsZWN0LgorICogICAgICAgICAgICAgIFRoaXMgaGFjayBpcyBmb3IgZW5hYmxpbmcgImlzZHJhbSIgY29tbWFuZCBvbiBUc2kxMDggYm9hcmRzCisgKiAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2VzIHRvIGNvbW1vbiBjb2RlLiBVc2VkIGZvciBJMkMgcmVhZHMgb25seS4KKyAqICAgYnl0ZV9hZGRyOiBNZW1vcnkgb3IgcmVnaXN0ZXIgYWRkcmVzcyB3aXRoaW4gdGhlIGNoaXAKKyAqICAgYWxlbjogICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZvciBhZGRyICh0eXBpY2FsbHkgMSwgMiBmb3IgbGFyZ2VyCisgKiAgICAgICAgICAgICAgbWVtb3JpZXMsIDAgZm9yIHJlZ2lzdGVyIHR5cGUgZGV2aWNlcyB3aXRoIG9ubHkgb25lCisgKiAgICAgICAgICAgICAgcmVnaXN0ZXIpCisgKiAgIGJ1ZmZlcjogICAgUG9pbnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIgZm9yIGRhdGEgdG8gYmUgcmVhZAorICogICBsZW46ICAgICAgIEhvdyBtYW55IGJ5dGVzIHRvIHJlYWQKKyAqCisgKiAgIFJldHVybnM6IDAgb24gc3VjY2Vzcywgbm90IDAgb24gZmFpbHVyZQorICovCisKK2ludCBpMmNfcmVhZCAodWNoYXIgY2hpcF9hZGRyLCB1aW50IGJ5dGVfYWRkciwgaW50IGFsZW4sCisJCXVjaGFyICogYnVmZmVyLCBpbnQgbGVuKQoreworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1BBUkFNX0VSUjsKKwl1MzIgaTJjX2lmID0gMDsKKworCS8qIEhhY2sgdG8gc3VwcG9ydCBzZWNvbmQgKFNQRCkgSTJDIGNvbnRyb2xsZXIgKFNQRCBFRVBST00gcmVhZCBvbmx5KS4qLworCWlmICgweEQwID09IChjaGlwX2FkZHIgJiB+MHgwNykpIHsKKwkJaTJjX2lmID0gMTsKKwkJY2hpcF9hZGRyICY9IDB4N0Y7CisJfQorCS8qIENoZWNrIGZvciB2YWxpZCBJMkMgYWRkcmVzcyAqLworCWlmIChjaGlwX2FkZHIgPD0gMHg3RiAmJiAoYnl0ZV9hZGRyICsgbGVuKSA8PSAoMHgwMSA8PCAoYWxlbiAqIDgpKSkgeworCQl3aGlsZSAobGVuLS0pIHsKKwkJCW9wX3N0YXR1cyA9IGkyY19yZWFkX2J5dGUoaTJjX2lmLCBjaGlwX2FkZHIsIGJ5dGVfYWRkcisrLCBidWZmZXIrKyk7CisKKwkJCWlmIChUU0kxMDhfSTJDX1NVQ0NFU1MgIT0gb3Bfc3RhdHVzKSB7CisJCQkJRFBSSU5UICgoIkkyQyByZWFkX2J5dGUoKSBmYWlsZWQ6IDB4JTAyeCAoJWQgbGVmdClcbiIsIG9wX3N0YXR1cywgbGVuKSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVCAoKCJJMkMgcmVhZCgpIHN0YXR1czogMHglMDJ4XG4iLCBvcF9zdGF0dXMpKTsKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKiBJMkMgd3JpdGUgaGVscGVyIGZ1bmN0aW9uICovCisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlX2J5dGUgKHVjaGFyIGNoaXBfYWRkciwvKiBJMkMgZGV2aWNlIGFkZHJlc3Mgb24gdGhlIGJ1cyAqLworCQkJICB1aW50IGJ5dGVfYWRkciwgLyogQnl0ZSBhZGRyZXNzIHdpdGhpbiBJMkMgZGV2aWNlICovCisJCQkgIHVjaGFyICogYnVmZmVyICAvKiAgcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAqLworCQkJICApCit7CisJdTMyIHRlbXA7CisJdTMyIHRvX2NvdW50ID0gSTJDX0RFTEFZOworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1RJTUVPVVRfRVJSOworCisJLyogQ2hlY2sgaWYgSTJDIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLworCXRlbXAgPSAqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9JMkNfT0ZGU0VUICsgSTJDX0NOVFJMMik7CisKKwlpZiAoMCA9PSAodGVtcCAmIChJMkNfQ05UUkwyX1JEX1NUQVRVUyB8IEkyQ19DTlRSTDJfV1JfU1RBVFVTIHwgSTJDX0NOVFJMMl9TVEFSVCkpKSB7CisJCS8qIFBsYWNlIGRhdGEgaW50byB0aGUgSTJDIFR4IFJlZ2lzdGVyICovCisJCSoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0kyQ19PRkZTRVQgKworCQkJICBJMkNfVFhfREFUQSkgPSAodTMyKSAqIGJ1ZmZlcjsKKworCQkvKiBTZXQgZGV2aWNlIGFkZHJlc3MgYW5kIG9wZXJhdGlvbiAgKi8KKwkJdGVtcCA9CisJCSAgICBJMkNfQ05UUkwxX0kyQ1dSSVRFIHwgKGJ5dGVfYWRkciA8PCAxNikgfAorCQkgICAgKChjaGlwX2FkZHIgJiAweDA3KSA8PCA4KSB8ICgoY2hpcF9hZGRyID4+IDMpICYgMHgwRik7CisJCSoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0kyQ19PRkZTRVQgKworCQkJICBJMkNfQ05UUkwxKSA9IHRlbXA7CisKKwkJLyogSXNzdWUgdGhlIHdyaXRlIGNvbW1hbmQgKGF0IHRoaXMgbW9tZW50IGFsbCBvdGhlciBwYXJhbWV0ZXJzCisJCSAqIGFyZSAwIChzaXplID0gMSBieXRlLCBsYW5lID0gMCkKKwkJICovCisKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSTJDX09GRlNFVCArCisJCQkgIEkyQ19DTlRSTDIpID0gKEkyQ19DTlRSTDJfU1RBUlQpOworCisJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfVElNRU9VVF9FUlI7CisKKwkJLyogV2FpdCB1bnRpbCBvcGVyYXRpb24gY29tcGxldGVkICovCisJCWRvIHsKKwkJCS8qIFJlYWQgSTJDIG9wZXJhdGlvbiBzdGF0dXMgKi8KKwkJCXRlbXAgPSAqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9JMkNfT0ZGU0VUICsgSTJDX0NOVFJMMik7CisKKwkJCWlmICgwID09ICh0ZW1wICYgKEkyQ19DTlRSTDJfV1JfU1RBVFVTIHwgSTJDX0NOVFJMMl9TVEFSVCkpKSB7CisJCQkJaWYgKDAgPT0gKHRlbXAgJgorCQkJCSAgICAgKEkyQ19DTlRSTDJfSTJDX0NGR0VSUiB8CisJCQkJICAgICAgSTJDX0NOVFJMMl9JMkNfVE9fRVJSKSkpIHsKKwkJCQkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19TVUNDRVNTOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIHJlcG9ydCBkZXRlY3RlZCBIVyBlcnJvciAqLworCQkJCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX0lGX0VSUk9SOworCisJCQkJCURQUklOVCAoKCJJMkMgSFcgZXJyb3IgcmVwb3J0ZWQ6IDB4JTAyeFxuIiwgdGVtcCkpOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCisJCX0gd2hpbGUgKHRvX2NvdW50LS0pOworCX0gZWxzZSB7CisJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfSUZfQlVTWTsKKworCQlEUFJJTlQgKCgiSTJDIFRyYW5zYWN0aW9uIHN0YXJ0IGZhaWxlZDogMHglMDJ4XG4iLCB0ZW1wKSk7CisJfQorCisJcmV0dXJuIG9wX3N0YXR1czsKK30KKworLyoKKyAqIEkyQyBXcml0ZSBpbnRlcmZhY2UgYXMgZGVmaW5lZCBpbiAiaW5jbHVkZS9pMmMuaCIgOgorICogICBjaGlwX2FkZHI6IEkyQyBjaGlwIGFkZHJlc3MsIHJhbmdlIDAuLjEyNworICogICBieXRlX2FkZHI6IE1lbW9yeSBvciByZWdpc3RlciBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcAorICogICBhbGVuOiAgICAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIGFkZHIgKHR5cGljYWxseSAxLCAyIGZvciBsYXJnZXIKKyAqICAgICAgICAgICAgICBtZW1vcmllcywgMCBmb3IgcmVnaXN0ZXIgdHlwZSBkZXZpY2VzIHdpdGggb25seSBvbmUKKyAqICAgICAgICAgICAgICByZWdpc3RlcikKKyAqICAgYnVmZmVyOiAgICBQb2ludGVyIHRvIGRhdGEgdG8gYmUgd3JpdHRlbgorICogICBsZW46ICAgICAgIEhvdyBtYW55IGJ5dGVzIHRvIHdyaXRlCisgKgorICogICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5vdCAwIG9uIGZhaWx1cmUKKyAqLworCitpbnQgaTJjX3dyaXRlICh1Y2hhciBjaGlwX2FkZHIsIHVpbnQgYnl0ZV9hZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsCisJICAgICAgaW50IGxlbikKK3sKKwl1MzIgb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19QQVJBTV9FUlI7CisKKwkvKiBDaGVjayBmb3IgdmFsaWQgSTJDIGFkZHJlc3MgKi8KKwlpZiAoY2hpcF9hZGRyIDw9IDB4N0YgJiYgKGJ5dGVfYWRkciArIGxlbikgPD0gKDB4MDEgPDwgKGFsZW4gKiA4KSkpIHsKKwkJd2hpbGUgKGxlbi0tKSB7CisJCQlvcF9zdGF0dXMgPQorCQkJICAgIGkyY193cml0ZV9ieXRlIChjaGlwX2FkZHIsIGJ5dGVfYWRkcisrLCBidWZmZXIrKyk7CisKKwkJCWlmIChUU0kxMDhfSTJDX1NVQ0NFU1MgIT0gb3Bfc3RhdHVzKSB7CisJCQkJRFBSSU5UICgoIkkyQyB3cml0ZV9ieXRlKCkgZmFpbGVkOiAweCUwMnggKCVkIGxlZnQpXG4iLCBvcF9zdGF0dXMsIGxlbikpOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKgorICogSTJDIGludGVyZmFjZSBmdW5jdGlvbiBhcyBkZWZpbmVkIGluICJpbmNsdWRlL2kyYy5oIi4KKyAqIFByb2JlIHRoZSBnaXZlbiBJMkMgY2hpcCBhZGRyZXNzIGJ5IHJlYWRpbmcgc2luZ2xlIGJ5dGUgZnJvbSBvZmZzZXQgMC4KKyAqIFJldHVybnMgMCBpZiBhIGNoaXAgcmVzcG9uZGVkLCBub3QgMCBvbiBmYWlsdXJlLgorICovCisKK2ludCBpMmNfcHJvYmUgKHVjaGFyIGNoaXApCit7CisJdTMyIHRtcDsKKworCS8qCisJICogVHJ5IHRvIHJlYWQgdGhlIGZpcnN0IGxvY2F0aW9uIG9mIHRoZSBjaGlwLgorCSAqIFRoZSBUc2kxMDggSFcgZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcganVzdCB0aGUgY2hpcCBhZGRyZXNzCisJICogYW5kIGNoZWNrb25nIGZvciBhbiA8QUNLPiBiYWNrLgorCSAqLworCXJldHVybiBpMmNfcmVhZCAoY2hpcCwgMCwgMSwgKGNoYXIgKikmdG1wLCAxKTsKK30KKworI2VuZGlmCS8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykgKi8KKyNlbmRpZiAvKiBDT05GSUdfVFNJMTA4X0kyQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2kxMDhfcGNpLmMgYi9kcml2ZXJzL3RzaTEwOF9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYwNmRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90c2kxMDhfcGNpLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsZXggQm91bmluZSA8YWxleGFuZHJlYkB0dW5kcmEuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBQQ0kgaW5pdGlhbGlzYXRpb24gZm9yIHRoZSBUc2kxMDggRU1VIGJvYXJkLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmZGVmIENPTkZJR19UU0kxMDhfUENJCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDx0c2kxMDguaD4KKworc3RydWN0IHBjaV9jb250cm9sbGVyIGxvY2FsX2hvc2U7CisKK3ZvaWQgdHNpMTA4X2NsZWFyX3BjaV9lcnJvciAodm9pZCkKK3sKKwl1MzIgZXJyX3N0YXQsIGVycl9hZGRyLCBwY2lfc3RhdDsKKworCS8qCisJICogUXVpZXRseSBjbGVhciBlcnJvcnMgc2lnbmFsbGVkIGFzIHJlc3VsdCBvZiBQQ0kvWCBjb25maWd1cmF0aW9uIHJlYWQKKwkgKiByZXF1ZXN0cy4KKwkgKi8KKwkvKiBSZWFkIFBCIEVycm9yIExvZyBSZWdpc3RlcnMgKi8KKwllcnJfc3RhdCA9ICoodm9sYXRpbGUgdTMyICopKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCSAgICAgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9FUlJDUyk7CisJZXJyX2FkZHIgPSAqKHZvbGF0aWxlIHUzMiAqKShDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkgICAgIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfQUVSUik7CisJaWYgKGVycl9zdGF0ICYgUEJfRVJSQ1NfRVMpIHsKKwkJLyogQ2xlYXIgUENJL1ggYnVzIGVycm9ycyBpZiBhcHBsaWNhYmxlICovCisJCWlmICgoZXJyX2FkZHIgJiAweEZGMDAwMDAwKSA9PSBDRkdfUENJX0NGR19CQVNFKSB7CisJCQkvKiBDbGVhciBlcnJvciBmbGFnICovCisJCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJICBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX0VSUkNTKSA9CisJCQkgICAgUEJfRVJSQ1NfRVM7CisKKwkJCS8qIENsZWFyIHJlYWQgZXJyb3IgcmVwb3J0ZWQgaW4gUEJfSVNSICovCisJCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJICBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX0lTUikgPQorCQkJICAgIFBCX0lTUl9QQlNfUkRfRVJSOworCisJCS8qIENsZWFyIGVycm9ycyByZXBvcnRlZCBieSBQQ0kgQ1NSIChOb3JtYWxseSBNYXN0ZXIgQWJvcnQpICovCisJCQlwY2lfc3RhdCA9ICoodm9sYXRpbGUgdTMyICopKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCQkJICAgICBUU0kxMDhfUENJX1JFR19PRkZTRVQgKworCQkJCQkJICAgICBQQ0lfQ1NSKTsKKwkJCSoodm9sYXRpbGUgdTMyICopKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCQkgIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9DU1IpID0KKwkJCSAgICBwY2lfc3RhdDsKKworCQkJKih2b2xhdGlsZSB1MzIgKikoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJCSAgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsKKwkJCQkJICBQQ0lfSVJQX1NUQVQpID0gUENJX0lSUF9TVEFUX1BfQ1NSOworCQl9CisJfQorCisJcmV0dXJuOworfQorCit1bnNpZ25lZCBpbnQgX19nZXRfcGNpX2NvbmZpZ19kd29yZCAodTMyIGFkZHIpCit7CisJdW5zaWduZWQgaW50IHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgICAgIGx3YnJ4ICUwLDAsJTFcbiIKKwkJCSAgICAgIjE6ICAgICBlaWVpb1xuIgorCQkJICAgICAiMjpcbiIKKwkJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJCSAgICAgIjM6ICAgICBsaSAlMCwtMVxuIgorCQkJICAgICAiICAgICAgIGIgMmJcbiIKKwkJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJCSAgICAgIiAgICAgICAuYWxpZ24gMlxuIgorCQkJICAgICAiICAgICAgIC5sb25nIDFiLDNiXG4iCisJCQkgICAgICIudGV4dCI6Ij1yIihyZXR2YWwpOiJyIihhZGRyKSk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X3JlYWRfY29uZmlnX2R3b3JkIChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgIHBjaV9kZXZfdCBkZXYsIGludCBvZmZzZXQsIHUzMiAqIHZhbHVlKQoreworCWRldiAmPSAoQ0ZHX1BDSV9DRkdfU0laRSAtIDEpOworCWRldiB8PSAoQ0ZHX1BDSV9DRkdfQkFTRSB8IChvZmZzZXQgJiAweGZjKSk7CisJKnZhbHVlID0gX19nZXRfcGNpX2NvbmZpZ19kd29yZChkZXYpOworCWlmICgweEZGRkZGRkZGID09ICp2YWx1ZSkKKwkJdHNpMTA4X2NsZWFyX3BjaV9lcnJvciAoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0c2kxMDhfd3JpdGVfY29uZmlnX2R3b3JkIChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgICBwY2lfZGV2X3QgZGV2LCBpbnQgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJZGV2ICY9IChDRkdfUENJX0NGR19TSVpFIC0gMSk7CisJZGV2IHw9IChDRkdfUENJX0NGR19CQVNFIHwgKG9mZnNldCAmIDB4ZmMpKTsKKworCW91dF9sZTMyICgodm9sYXRpbGUgdW5zaWduZWQgKilkZXYsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBjaV9pbml0X2JvYXJkICh2b2lkKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikmbG9jYWxfaG9zZTsKKworCWhvc2UtPmZpcnN0X2J1c25vID0gMDsKKwlob3NlLT5sYXN0X2J1c25vID0gMHhmZjsKKworCXBjaV9zZXRfcmVnaW9uIChob3NlLT5yZWdpb25zICsgMCwKKwkJICAgICAgIENGR19QQ0lfTUVNT1JZX0JVUywKKwkJICAgICAgIENGR19QQ0lfTUVNT1JZX1BIWVMsCisJCSAgICAgICBDRkdfUENJX01FTU9SWV9TSVpFLCBQQ0lfUkVHSU9OX01FTSB8IFBDSV9SRUdJT05fTUVNT1JZKTsKKworCS8qIFBDSSBtZW1vcnkgc3BhY2UgKi8KKwlwY2lfc2V0X3JlZ2lvbiAoaG9zZS0+cmVnaW9ucyArIDEsCisJCSAgICAgICBDRkdfUENJX01FTV9CVVMsCisJCSAgICAgICBDRkdfUENJX01FTV9QSFlTLCBDRkdfUENJX01FTV9TSVpFLCBQQ0lfUkVHSU9OX01FTSk7CisKKwkvKiBQQ0kgSS9PIHNwYWNlICovCisJcGNpX3NldF9yZWdpb24gKGhvc2UtPnJlZ2lvbnMgKyAyLAorCQkgICAgICAgQ0ZHX1BDSV9JT19CVVMsCisJCSAgICAgICBDRkdfUENJX0lPX1BIWVMsIENGR19QQ0lfSU9fU0laRSwgUENJX1JFR0lPTl9JTyk7CisKKwlob3NlLT5yZWdpb25fY291bnQgPSAzOworCisJcGNpX3NldF9vcHMgKGhvc2UsCisJCSAgICBwY2lfaG9zZV9yZWFkX2NvbmZpZ19ieXRlX3ZpYV9kd29yZCwKKwkJICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX3dvcmRfdmlhX2R3b3JkLAorCQkgICAgdHNpMTA4X3JlYWRfY29uZmlnX2R3b3JkLAorCQkgICAgcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGVfdmlhX2R3b3JkLAorCQkgICAgcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmRfdmlhX2R3b3JkLAorCQkgICAgdHNpMTA4X3dyaXRlX2NvbmZpZ19kd29yZCk7CisKKwlwY2lfcmVnaXN0ZXJfaG9zZSAoaG9zZSk7CisKKwlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2NhbiAoaG9zZSk7CisKKwlkZWJ1ZyAoIkRvbmUgUENJIGluaXRpYWxpemF0aW9uXG4iKTsKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfT0ZfRkxBVF9UUkVFCit2b2lkCitmdF9wY2lfc2V0dXAgKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJcCA9ICh1MzIgKilmdF9nZXRfcHJvcCAoYmxvYiwgIi8iIE9GX1RTSSAiL3BjaUAxMDAwL2J1cy1yYW5nZSIsICZsZW4pOworCWlmIChwICE9IE5VTEwpIHsKKwkJcFswXSA9IGxvY2FsX2hvc2UuZmlyc3RfYnVzbm87CisJCXBbMV0gPSBsb2NhbF9ob3NlLmxhc3RfYnVzbm87CisJfQorCit9CisjZW5kaWYKKworI2VuZGlmCS8qIENPTkZJR19UU0kxMDhfUENJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlLzc0eHhfN3h4LmggYi9pbmNsdWRlLzc0eHhfN3h4LmgKaW5kZXggMzNlMzk2YS4uYmE3M2JhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS83NHh4Xzd4eC5oCisrKyBiL2luY2x1ZGUvNzR4eF83eHguaApAQCAtMTExLDcgKzExMSw3IEBACiAJQ1BVXzc1MENYLCBDUFVfNzUwRlgsIENQVV83NTBHWCwKIAlDUFVfNzQwMCwKIAlDUFVfNzQxMCwKLQlDUFVfNzQ0OCwKKwlDUFVfNzQ0N0EsIENQVV83NDQ4LAogCUNQVV83NDUwLCBDUFVfNzQ1NSwgQ1BVXzc0NTcsCiAJQ1BVX1VOS05PV059IGNwdV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaCBiL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCmluZGV4IDhiYzYxYjYuLjVmMGYwYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCkBAIC00OSw2ICs0OSw5IEBACiAJdW5zaWduZWQgbG9uZwlzY2NfY2xrOwogCXVuc2lnbmVkIGxvbmcJYnJnX2NsazsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX01QQzc0NDhIUEMyKQorCXVuc2lnbmVkIGxvbmcgICBtZW1fY2xrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKIAkvKiBUaGVyZSBhcmUgb3RoZXIgY2xvY2tzIGluIHRoZSBNUEM4M1hYICovCiAJdTMyIGNzYl9jbGs7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbXBjNzQ0OGhwYzIuaCBiL2luY2x1ZGUvY29uZmlncy9tcGM3NDQ4aHBjMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2EzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbXBjNzQ0OGhwYzIuaApAQCAtMCwwICsxLDQxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogQWxleCBCb3VuaW5lICwgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIFJveSBaYW5nCSwgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPiBGcmVlc2NhbGUgQ29ycC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBGcmVlc2NhbGUKKyAqIE1QQzc0NDhIUEMyIChIaWdoLVBlcmZvcm1hbmNlIENvbXB1dGluZyBJSSkgKFRhaWdhKSBib2FyZAorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjdW5kZWYgREVCVUcKKworLyogQm9hcmQgQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucyAqLworLyogTVBDNzQ0OEhQQzIgKEhpZ2gtUGVyZm9ybWFuY2UgQ29tcHV0aW5nIElJKSAoVGFpZ2EpIGJvYXJkICovCisKKyNkZWZpbmUgQ09ORklHX01QQzc0NDhIUEMyCisKKyNkZWZpbmUgQ09ORklHXzc0eHgKKyNkZWZpbmUgQ09ORklHXzc1MEZYCQkvKiB0aGlzIG9wdGlvbiB0byBlbmFibGUgaW5pdCBvZiBleHRlbmRlZCBCQVRzICovCisjZGVmaW5lIENPTkZJR19BTFRJVkVDCQkvKiB1bmRlZiB0byBkaXNhYmxlICovCisKKyNkZWZpbmUgQ0ZHX0JPQVJEX05BTUUJCSJNUEM3NDQ4IEhQQyBJSSIKKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIEZyZWVzY2FsZSBNUEM3NDQ4IEhQQyBJSSIKKworI2RlZmluZSBDRkdfT0NOX0NMSwkJMTMzMDAwMDAwCS8qIDEzMyBNSHogKi8KKyNkZWZpbmUgQ0ZHX0NPTkZJR19CVVNfQ0xLCTEzMzAwMDAwMAorCisjZGVmaW5lIENGR19DTEtfU1BSRUFECQkvKiBFbmFibGUgU3ByZWFkLVNwZWN0cnVtIENsb2NrIGdlbmVyYXRpb24gKi8KKworI3VuZGVmICBDT05GSUdfRUNDCQkvKiBkaXNhYmxlIEVDQyBzdXBwb3J0ICovCisKKy8qIEJvYXJkLXNwZWNpZmljIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgKi8KKyNkZWZpbmUgQ0ZHX0JPQVJEX0FTTV9JTklUCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfUgorI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKworI2RlZmluZSBDT05GSUdfSEFTX0VUSDEKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCS8qIGNvbnNvbGUgYmF1ZHJhdGUgPSAxMTUwMDAgKi8KKworLyojZGVmaW5lIENGR19IVVNIX1BBUlNFUiAqLworI3VuZGVmIENGR19IVVNIX1BBUlNFUgorCisjZGVmaW5lIENGR19QUk9NUFRfSFVTSF9QUzIJIj4gIgorCisvKiBQYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlICovCisjZGVmaW5lIENPTkZJR19PRl9GTEFUX1RSRUUJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisvKiBtYXhpbXVtIHNpemUgb2YgdGhlIGZsYXQgdHJlZSAoOEspICovCisjZGVmaW5lIE9GX0ZMQVRfVFJFRV9NQVhfU0laRQk4MTkyCisKKyNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsNzQ0OEAwIgorI2RlZmluZSBPRl9UU0kJCQkidHNpMTA4QGMwMDAwMDAwIgorI2RlZmluZSBPRl9UQkNMSwkJKGJkLT5iaV9idXNmcmVxIC8gOCkKKyNkZWZpbmUgT0ZfU1RET1VUX1BBVEgJCSIvdHNpMTA4QGMwMDAwMDAwL3NlcmlhbEA3ODA4IgorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGxldCB5b3Ugc2VsZWN0IHdoYXQgc2VyaWFsIHlvdSB3YW50IHRvIHVzZQorICogZm9yIHlvdXIgY29uc29sZSBkcml2ZXIuCisgKgorICogd2hhdCB0byBkbzoKKyAqIElmIHlvdSBoYXZlIGhhY2tlZCBhIHNlcmlhbCBjYWJsZSBvbnRvIHRoZSBzZWNvbmQgRFVBUlQgY2hhbm5lbCwKKyAqIGNoYW5nZSB0aGUgQ0ZHX0RVQVJUIHBvcnQgZnJvbSAxIHRvIDAgYmVsb3cuCisgKgorICovCisKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQorI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCUNGR19PQ05fQ0xLICogOAorCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTEJKENGR19UU0kxMDhfQ1NSX1JTVF9CQVNFKzB4NzgwOCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMgkoQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UrMHg3QzA4KQorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwkvKiBhdXRvYm9vdCBhZnRlciAzIHNlY29uZHMgKi8KKyNkZWZpbmUgQ09ORklHX1pFUk9fQk9PVERFTEFZX0NIRUNLCisKKyN1bmRlZiBDT05GSUdfQk9PVEFSR1MKKy8qICNkZWZpbmUgQ09ORklHX1BSRUJPT1QgICJlY2hvO2VjaG8gVHlwZSBcInJ1biBmbGFzaF9uZnNcIgorICogdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTO2VjaG8iICovCisKKyNpZiAoQ09ORklHX0JPT1RERUxBWSA+PSAwKQorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInRmdHBib290IDB4NDAwMDAwIHpJbWFnZS5pbml0cmQuZWxmO1wKKyBzZXRlbnYgYm9vdGFyZ3MgJChib290YXJncykgJChib290YXJnc19yb290KSBuZnNyb290PSQoc2VydmVyaXApOiQocm9vdHBhdGgpIFwKKyBpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCkkKGJvb3RhcmdzX2VuZCk7ICBib290bSAweDQwMDAwMDsgIgorCisjZGVmaW5lIENPTkZJR19CT09UQVJHUyAiY29uc29sZT10dHlTMCwxMTUyMDAiCisjZW5kaWYKKworI3VuZGVmIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MKKworI2RlZmluZSBDT05GSUdfU0VSSUFMCSJOby4gMSIKKworLyogTmV0d29ya2luZyBDb25maWd1cmF0aW9uICovCisKKyNkZWZpbmUgS1NFRzFBRERSKGEpCShhKQkvKiBOZWVkZWQgYnkgdGhlIHJ0bDgxMzkgZHJpdmVyICovCisKKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9FVEgKKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTCTIKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQl6SW1hZ2UuaW5pdHJkLmVsZgorI2RlZmluZSBDT05GSUdfTE9BREFERFIJCTB4NDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkwCS8qIGVjaG8gb2ZmIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCS8qIGFsbG93IGJhdWRyYXRlIGNoYW5nZXMgKi8KKworI3VuZGVmIENPTkZJR19XQVRDSERPRwkJLyogd2F0Y2hkb2cgZGlzYWJsZWQgKi8KKworI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwkoQ09ORklHX0JPT1RQX0RFRkFVTFQgfCBcCisJCQkJQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMgKENPTkZJR19DTURfREZMIFwKKwkJfCBDRkdfQ01EX0FTS0VOViBcCisJCXwgQ0ZHX0NNRF9DQUNIRSBcCisJCXwgQ0ZHX0NNRF9QQ0kgXAorCQl8IENGR19DTURfSTJDIFwKKwkJfCBDRkdfQ01EX1NEUkFNIFwKKwkJfCBDRkdfQ01EX0VFUFJPTSBcCisJCXwgQ0ZHX0NNRF9GTEFTSCBcCisJCXwgQ0ZHX0NNRF9FTlYgXAorCQl8IENGR19DTURfQlNQIFwKKwkJfCBDRkdfQ01EX0RIQ1AgXAorCQl8IENGR19DTURfUElORyBcCisJCXwgQ0ZHX0NNRF9EQVRFKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qc2V0IGRhdGUgaW4gdS1ib290Ki8KKyNkZWZpbmUgQ09ORklHX1JUQ19NNDhUMzVBCisjZGVmaW5lIENGR19OVlJBTV9CQVNFX0FERFIJMHhmYzAwMDAwMAorI2RlZmluZSBDRkdfTlZSQU1fU0laRQkJMHg4MDAwCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFCQkxCisjZGVmaW5lIENPTkZJR19UU0kxMDhfSTJDCisKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkJMHg1MAkvKiBJMkMgRUVQUk9NIHBhZ2UgMSAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTgkJMQkvKiBCeXRlcyBvZiBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJCTEwMjQJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0IGF0ICovCisjZWxzZQorI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDA0MDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDdjMDAwMDAJLyogNCAuLi4gMTI0IE1CIGluIERSQU0gKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MDA0MDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3IgZnJlcTogMW1zIHRpY2tzICovCisKKy8qCisgKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncworICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQorICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhCisgKi8KKworLyoKKyAqIFdoZW4gbG9ja2luZyBkYXRhIGluIGNhY2hlIHlvdSBzaG91bGQgcG9pbnQgdGhlIENGR19JTklUX1JBTV9BRERSRVNTCisgKiBUbyBhbiB1bnVzZWQgbWVtb3J5IHJlZ2lvbi4gVGhlIHN0YWNrIHdpbGwgcmVtYWluIGluIGNhY2hlIHVudGlsIFJBTQorICogaXMgaW5pdGlhbGl6ZWQKKyAqLworI3VuZGVmICBDRkdfSU5JVF9SQU1fTE9DSworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDA3ZDAwMDAwCS8qIHVudXNlZCBtZW1vcnkgcmVnaW9uICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHg0MDAwLyogbGFyZ2VyIHNwYWNlIC0gd2UgaGF2ZSBTRFJBTSBpbml0aWFsaXplZCAqLworCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXQgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUIChDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKi8KKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAkvKiBmaXJzdCAyNTYgTUIgb2YgU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNMV9CQVNFCQkweDEwMDAwMDAwCS8qIG5leHQgMjU2TUIgb2YgU0RSQU0gKi8KKworI2RlZmluZSBDRkdfU0RSQU0yX0JBU0UJMHg0MDAwMDAwMAkvKiBiZWdpbm5pbmcgb2Ygbm9uLWNhY2hlYWJsZSBhbGlhcyBmb3IgU0RSQU0gLSBmaXJzdCAyNTZNQiAqLworI2RlZmluZSBDRkdfU0RSQU0zX0JBU0UJMHg1MDAwMDAwMAkvKiBuZXh0IE5vbi1DYWNoZWFibGUgMjU2TUIgb2YgU0RSQU0gKi8KKworI2RlZmluZSBDRkdfUENJX1BGTV9CQVNFCTB4ODAwMDAwMDAJLyogUHJlZmV0Y2hhYmxlIChjYWNoZWFibGUpIFBDSS9YIFBGTSBhbmQgU0RSQU0gT0NOICgxMjhNQisxMjhNQikgKi8KKworI2RlZmluZSBDRkdfUENJX01FTTMyX0JBU0UJMHhFMDAwMDAwMAkvKiBOb24tQ2FjaGVhYmxlIFBDSS9YIE1FTSBhbmQgU0RSQU0gT0NOICgxMjhNQisxMjhNQikgKi8KKworI2RlZmluZSBDRkdfTUlTQ19SRUdJT05fQkFTRQkweGYwMDAwMDAwCS8qIEJhc2UgQWRkcmVzcyBmb3IgKFBDSS9YICsgRmxhc2gpIHJlZ2lvbiAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCTB4ZmYwMDAwMDAJLyogQmFzZSBBZGRyZXNzIG9mIEZsYXNoIGRldmljZSAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRTIJMHhmZTAwMDAwMAkvKiBBbHRlcm5hdGUgRmxhc2ggQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgQ09ORklHX1ZFUllfQklHX1JBTQkvKiB3ZSB3aWxsIHVzZSB1cCB0byAyNTZNIG1lbW9yeSBmb3IgY2F1c2Ugd2UgYXJlIHNob3J0IG9mIEJBVFMgKi8KKworI2RlZmluZSBQQ0kwX0lPX0JBU0VfQk9PVE0JMHhmZDAwMDAwMAorCisjZGVmaW5lIENGR19SRVNFVF9BRERSRVNTCTB4M2ZmZmZmMDAKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvciAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQkvKiB1LWJvb3QgY29kZSBiYXNlICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgbWFsbG9jICovCisKKy8qIFBlcmlwaGVyYWwgRGV2aWNlIHNlY3Rpb24gKi8KKworLyoKKyAqIFJlc291cmNlcyBvbiB0aGUgVHNpMTA4CisgKi8KKworI2RlZmluZSBDRkdfVFNJMTA4X0NTUl9SU1RfQkFTRQkweEMwMDAwMDAwCS8qIFRzaTEwOCBDU1IgYmFzZSBhZnRlciByZXNldCAqLworI2RlZmluZSBDRkdfVFNJMTA4X0NTUl9CQVNFCUNGR19UU0kxMDhfQ1NSX1JTVF9CQVNFCS8qIFJ1bnRpbWUgVHNpMTA4IENTUiBiYXNlICovCisKKyNkZWZpbmUgRU5BQkxFX1BDSV9DU1JfQkFSCS8qIGVuYWJsZXMgYWNjZXNzIHRvIFRzaTEwOCBDU1JzIGZyb20gdGhlIFBDSS9YIGJ1cyAqLworCisjdW5kZWYgIERJU0FCTEVfUEJNCisKKy8qCisgKiBQQ0kgc3R1ZmYKKyAqCisgKi8KKworI2RlZmluZSBDT05GSUdfUENJCQkvKiBpbmNsdWRlIHBjaSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19UU0kxMDhfUENJCS8qIGluY2x1ZGUgdHNpMTA4IHBjaSBzdXBwb3J0ICovCisKKyNkZWZpbmUgUENJX0hPU1RfQURBUFRFUgkwCS8qIGNvbmZpZ3VyZSBhcyBwY2kgYWRhcHRlciAqLworI2RlZmluZSBQQ0lfSE9TVF9GT1JDRQkJMQkvKiBjb25maWd1cmUgYXMgcGNpIGhvc3QgKi8KKyNkZWZpbmUgUENJX0hPU1RfQVVUTwkJMgkvKiBkZXRlY3RlZCB2aWEgYXJiaXRlciBlbmFibGUgKi8KKworI2RlZmluZSBDT05GSUdfUENJX0hPU1QgUENJX0hPU1RfRk9SQ0UJLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICovCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCQkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLworCisvKiBQQ0kgTUVNT1JZIE1BUCBzZWN0aW9uICovCisKKy8qIFBDSSB2aWV3IG9mIFN5c3RlbSBNZW1vcnkgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfQlVTCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfUEhZUwkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX1NJWkUJMHg4MDAwMDAwMAorCisvKiBQQ0kgTWVtb3J5IFNwYWNlICovCisjZGVmaW5lIENGR19QQ0lfTUVNX0JVUwkJKENGR19QQ0lfTUVNX1BIWVMpCisjZGVmaW5lIENGR19QQ0lfTUVNX1BIWVMJKENGR19QQ0lfTUVNMzJfQkFTRSkJLyogMHhFMDAwMDAwMCAqLworI2RlZmluZSBDRkdfUENJX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2IE1CIHNwYWNlIGZvciBQQ0kvWCBNZW0gKyBTRFJBTSBPQ04gKi8KKworLyogUENJIEkvTyBTcGFjZSAqLworI2RlZmluZSBDRkdfUENJX0lPX0JVUwkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX0lPX1BIWVMJCTB4ZmEwMDAwMDAJLyogQ2hhbmdlZCBmcm9tIGZkMDAwMDAwICovCisKKyNkZWZpbmUgQ0ZHX1BDSV9JT19TSVpFCQkweDAxMDAwMDAwCS8qIDE2TUIgKi8KKworI2RlZmluZSBfSU9fQkFTRQkJMHgwMDAwMDAwMAkvKiBwb2ludHMgdG8gUENJIEkvTyBzcGFjZSAgICAgICovCisKKy8qIFBDSSBDb25maWcgU3BhY2UgbWFwcGluZyAqLworI2RlZmluZSBDRkdfUENJX0NGR19CQVNFCTB4ZmIwMDAwMDAJLyogQ2hhbmdlZCBmcm9tIEZFMDAwMDAwICovCisjZGVmaW5lIENGR19QQ0lfQ0ZHX1NJWkUJMHgwMTAwMDAwMAkvKiAxNk1CICovCisKKyNkZWZpbmUgQ0ZHX0lCQVQwVQkweEZFMDAwM0ZGCisjZGVmaW5lIENGR19JQkFUMEwJMHhGRTAwMDAwMgorCisjZGVmaW5lIENGR19JQkFUMVUJMHgwMDAwN0ZGRgorI2RlZmluZSBDRkdfSUJBVDFMCTB4MDAwMDAwMTIKKworI2RlZmluZSBDRkdfSUJBVDJVCTB4ODAwMDdGRkYKKyNkZWZpbmUgQ0ZHX0lCQVQyTAkweDgwMDAwMDIyCisKKyNkZWZpbmUgQ0ZHX0lCQVQzVQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19JQkFUM0wJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19JQkFUNFUJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDRMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfSUJBVDVVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0lCQVQ1TAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ2VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19JQkFUNkwJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19JQkFUN1UJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDdMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfREJBVDBVCTB4RTAwMDNGRkYKKyNkZWZpbmUgQ0ZHX0RCQVQwTAkweEUwMDAwMDJBCisKKyNkZWZpbmUgQ0ZHX0RCQVQxVQkweDAwMDA3RkZGCisjZGVmaW5lIENGR19EQkFUMUwJMHgwMDAwMDAxMgorCisjZGVmaW5lIENGR19EQkFUMlUJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDJMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfREJBVDNVCTB4QzAwMDAwMDMKKyNkZWZpbmUgQ0ZHX0RCQVQzTAkweEMwMDAwMDJBCisKKyNkZWZpbmUgQ0ZHX0RCQVQ0VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19EQkFUNEwJMHgwMDAwMDAwMAorCisjZGVmaW5lIENGR19EQkFUNVUJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDVMCTB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfREJBVDZVCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0RCQVQ2TAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQ3VQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19EQkFUN0wJMHgwMDAwMDAwMAorCisvKiBJMkMgYWRkcmVzc2VzIGZvciB0aGUgdHdvIERJTU0gU1BEIGNoaXBzICovCisjZGVmaW5lIERJTU0wX0kyQ19BRERSCTB4NTEKKyNkZWZpbmUgRElNTTFfSTJDX0FERFIJMHg1MgorCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCSg4PDwyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEvKiBGbGFzaCBjYW4gYmUgYXQgb25lIG9mIHR3byBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRkxBU0hfQkFOS19TSVpFCQkweDAxMDAwMDAwCS8qIDE2IE1CIFRvdGFsICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUIHtDRkdfRkxBU0hfQkFTRSwgQ0ZHX0ZMQVNIX0JBU0UyfQorCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENGR19GTEFTSF9DRkkKKyNkZWZpbmUgQ0ZHX1dSSVRFX1NXQVBQRURfREFUQQorCisjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwMTAwMDAwMAorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJKDEyOCkKKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05WUkFNCisjZGVmaW5lIENGR19FTlZfQUREUgkJMHhGQzAwMDAwMAorCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCTB4MDAwMDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBDRkdfRU5WX1NJWkUJMHgwMDAwMDQwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNwYWNlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhY2hlIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIGFsbCBNUEM3NHh4IENQVXMgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMMkNSIHNldHVwIC0tIG1ha2Ugc3VyZSB0aGlzIGlzIHJpZ2h0IGZvciB5b3VyIGJvYXJkIQorICogbG9vayBpbiBpbmNsdWRlL21wYzc0eHguaCBmb3IgdGhlIGRlZmluZXMgdXNlZCBoZXJlCisgKi8KKyN1bmRlZiBDRkdfTDIKKworI2RlZmluZSBMMl9JTklUCQkwCisjZGVmaW5lIEwyX0VOQUJMRQkoTDJfSU5JVCB8IEwyQ1JfTDJFKQorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkvKiBTb2Z0d2FyZSByZWJvb3QgKi8KKyNkZWZpbmUgQ0ZHX1NFUklBTF9IQU5HX0lOX0VYQ0VQVElPTgorI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHNpMTA4LmggYi9pbmNsdWRlL3RzaTEwOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjJlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RzaTEwOC5oCkBAIC0wLDAgKzEsMjIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIChDKSBDb3B5cmlnaHQgMjAwMzsgIFR1bmRyYSBTZW1pY29uZHVjdG9yIENvcnAuCisgKiAoQykgQ29weXJpZ2h0IDIwMDY7ICBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHRzaTEwOC5oCisgKgorICogT3JpZ2luYXRvcjogQWxleCBCb3VuaW5lCisgKgorICogREVTQ1JJUFRJT046CisgKiBDb21tb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBUdW5kcmEgVHNpMTA4IGJyaWRnZSBjaGlwCisgKgorICovCisKKyNpZm5kZWYgX1RTSTEwOF9IXworI2RlZmluZSBfVFNJMTA4X0hfCisKKyNkZWZpbmUgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUCSgweDAwMDApCisjZGVmaW5lIFRTSTEwOF9QQ0lfUkVHX09GRlNFVAkoMHgxMDAwKQorI2RlZmluZSBUU0kxMDhfQ0xLX1JFR19PRkZTRVQJKDB4MjAwMCkKKyNkZWZpbmUgVFNJMTA4X1BCX1JFR19PRkZTRVQJKDB4MzAwMCkKKyNkZWZpbmUgVFNJMTA4X1NEX1JFR19PRkZTRVQJKDB4NDAwMCkKKyNkZWZpbmUgVFNJMTA4X01QSUNfUkVHX09GRlNFVAkoMHg3NDAwKQorCisjZGVmaW5lIFBCX0lECQkJKDB4MDAwKQorI2RlZmluZSBQQl9SU1IJCQkoMHgwMDQpCisjZGVmaW5lIFBCX0JVU19NU19TRUxFQ1QJKDB4MDA4KQorI2RlZmluZSBQQl9JU1IJCQkoMHgwMEMpCisjZGVmaW5lIFBCX0FSQl9DVFJMCQkoMHgwMTgpCisjZGVmaW5lIFBCX1BWVF9DVFJMMgkJKDB4MDM0KQorI2RlZmluZSBQQl9TQ1IJCQkoMHg0MDApCisjZGVmaW5lIFBCX0VSUkNTCQkoMHg0MDQpCisjZGVmaW5lIFBCX0FFUlIJCQkoMHg0MDgpCisjZGVmaW5lIFBCX1JFR19CQVIJCSgweDQxMCkKKyNkZWZpbmUgUEJfT0NOX0JBUjEJCSgweDQxNCkKKyNkZWZpbmUgUEJfT0NOX0JBUjIJCSgweDQxOCkKKyNkZWZpbmUgUEJfU0RSQU1fQkFSMQkJKDB4NDFDKQorI2RlZmluZSBQQl9TRFJBTV9CQVIyCQkoMHg0MjApCisjZGVmaW5lIFBCX01DUgkJCSgweEMwMCkKKyNkZWZpbmUgUEJfTUNNRAkJCSgweEMwNCkKKworI2RlZmluZSBITFBfQjBfQUREUgkJKDB4MDAwKQorI2RlZmluZSBITFBfQjFfQUREUgkJKDB4MDEwKQorI2RlZmluZSBITFBfQjJfQUREUgkJKDB4MDIwKQorI2RlZmluZSBITFBfQjNfQUREUgkJKDB4MDMwKQorCisjZGVmaW5lIEhMUF9CMF9NQVNLCQkoMHgwMDQpCisjZGVmaW5lIEhMUF9CMV9NQVNLCQkoMHgwMTQpCisjZGVmaW5lIEhMUF9CMl9NQVNLCQkoMHgwMjQpCisjZGVmaW5lIEhMUF9CM19NQVNLCQkoMHgwMzQpCisKKyNkZWZpbmUgSExQX0IwX0NUUkwwCQkoMHgwMDgpCisjZGVmaW5lIEhMUF9CMV9DVFJMMAkJKDB4MDE4KQorI2RlZmluZSBITFBfQjJfQ1RSTDAJCSgweDAyOCkKKyNkZWZpbmUgSExQX0IzX0NUUkwwCQkoMHgwMzgpCisKKyNkZWZpbmUgSExQX0IwX0NUUkwxCQkoMHgwMEMpCisjZGVmaW5lIEhMUF9CMV9DVFJMMQkJKDB4MDFDKQorI2RlZmluZSBITFBfQjJfQ1RSTDEJCSgweDAyQykKKyNkZWZpbmUgSExQX0IzX0NUUkwxCQkoMHgwM0MpCisKKyNkZWZpbmUgUENJX0NTUgkJCSgweDAwNCkKKyNkZWZpbmUgUENJX1AyT19CQVIwCQkoMHgwMTApCisjZGVmaW5lIFBDSV9QMk9fQkFSMF9VUFBFUgkoMHgwMTQpCisjZGVmaW5lIFBDSV9QMk9fQkFSMgkJKDB4MDE4KQorI2RlZmluZSBQQ0lfUDJPX0JBUjJfVVBQRVIJKDB4MDFDKQorI2RlZmluZSBQQ0lfUDJPX0JBUjMJCSgweDAyMCkKKyNkZWZpbmUgUENJX1AyT19CQVIzX1VQUEVSCSgweDAyNCkKKworI2RlZmluZSBQQ0lfTUlTQ19DU1IJCSgweDA0MCkKKyNkZWZpbmUgUENJX1AyT19QQUdFX1NJWkVTCSgweDA0QykKKworI2RlZmluZSBQQ0lfUENJWF9TVEFUCQkoMHgwRjQpCisKKyNkZWZpbmUgUENJX0lSUF9TVEFUCQkoMHgxODQpCisKKyNkZWZpbmUgUENJX1BGQUJfQkFSMAkJKDB4MjA0KQorI2RlZmluZSBQQ0lfUEZBQl9CQVIwX1VQUEVSCSgweDIwOCkKKyNkZWZpbmUgUENJX1BGQUJfSU8JCSgweDIwQykKKyNkZWZpbmUgUENJX1BGQUJfSU9fVVBQRVIJKDB4MjEwKQorCisjZGVmaW5lIFBDSV9QRkFCX01FTTMyCQkoMHgyMTQpCisjZGVmaW5lIFBDSV9QRkFCX01FTTMyX1JFTUFQCSgweDIxOCkKKyNkZWZpbmUgUENJX1BGQUJfTUVNMzJfTUFTSwkoMHgyMUMpCisKKyNkZWZpbmUgQ0dfUExMMF9DVFJMMAkJKDB4MjEwKQorI2RlZmluZSBDR19QTEwwX0NUUkwxCQkoMHgyMTQpCisjZGVmaW5lIENHX1BMTDFfQ1RSTDAJCSgweDIyMCkKKyNkZWZpbmUgQ0dfUExMMV9DVFJMMQkJKDB4MjI0KQorI2RlZmluZSBDR19QV1JVUF9TVEFUVVMJCSgweDIzNCkKKworI2RlZmluZSBNUElDX0NTUihuKSAoMHgzMEMgKyAobiAqIDB4NDApKQorCisjZGVmaW5lIFNEX0NUUkwJCQkoMHgwMDApCisjZGVmaW5lIFNEX1NUQVRVUwkJKDB4MDA0KQorI2RlZmluZSBTRF9USU1JTkcJCSgweDAwOCkKKyNkZWZpbmUgU0RfUkVGUkVTSAkJKDB4MDBDKQorI2RlZmluZSBTRF9JTlRfU1RBVFVTCQkoMHgwMTApCisjZGVmaW5lIFNEX0lOVF9FTkFCTEUJCSgweDAxNCkKKyNkZWZpbmUgU0RfSU5UX1NFVAkJKDB4MDE4KQorI2RlZmluZSBTRF9EMF9DVFJMCQkoMHgwMjApCisjZGVmaW5lIFNEX0QxX0NUUkwJCSgweDAyNCkKKyNkZWZpbmUgU0RfRDBfQkFSCQkoMHgwMjgpCisjZGVmaW5lIFNEX0QxX0JBUgkJKDB4MDJDKQorI2RlZmluZSBTRF9FQ0NfQ1RSTAkJKDB4MDQwKQorI2RlZmluZSBTRF9ETExfU1RBVFVTCQkoMHgyNTApCisKKyNkZWZpbmUgVFNfU0RfQ1RSTF9FTkFCTEUJKDEgPDwgMzEpCisKKyNkZWZpbmUgUEJfRVJSQ1NfRVMJCSgxIDw8IDEpCisjZGVmaW5lIFBCX0lTUl9QQlNfUkRfRVJSCSgxIDw8IDgpCisjZGVmaW5lIFBDSV9JUlBfU1RBVF9QX0NTUgkoMSA8PCAyMykKKworLyoKKyAqIEkyQyA6IFJlZ2lzdGVyIGFkZHJlc3Mgb2Zmc2V0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSTJDX0NOVFJMMQkJKDB4MDAwMDAwMDApCisjZGVmaW5lIEkyQ19DTlRSTDIJCSgweDAwMDAwMDA0KQorI2RlZmluZSBJMkNfUkRfREFUQQkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIEkyQ19UWF9EQVRBCQkoMHgwMDAwMDAwYykKKworLyoKKyAqIEkyQyA6IFJlZ2lzdGVyIEJpdCBNYXNrcyBhbmQgUmVzZXQgVmFsdWVzCisgKiBkZWZpbml0aW9ucyBmb3IgZXZlcnkgcmVnaXN0ZXIKKyAqLworCisvKiBJMkNfQ05UUkwxIDogUmVzZXQgVmFsdWUgKi8KKyNkZWZpbmUgSTJDX0NOVFJMMV9SRVNFVF9WQUxVRQkJCQkoMHgwMDAwMDAwYSkKKworLyogSTJDX0NOVFJMMSA6IFJlZ2lzdGVyIEJpdHMgTWFza3MgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSTJDX0NOVFJMMV9ERVZDT0RFCQkJCSgweDAwMDAwMDBmKQorI2RlZmluZSBJMkNfQ05UUkwxX1BBR0UJCQkJCSgweDAwMDAwNzAwKQorI2RlZmluZSBJMkNfQ05UUkwxX0JZVEFERFIJCQkJKDB4MDBmZjAwMDApCisjZGVmaW5lIEkyQ19DTlRSTDFfSTJDV1JJVEUJCQkJKDB4MDEwMDAwMDApCisKKy8qIEkyQ19DTlRSTDEgOiBSZWFkL1dyaXRlIEJpdCBNYXNrIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMV9SV01BU0sJCQkJKDB4MDFmZjA3MGYpCisKKy8qIEkyQ19DTlRSTDEgOiBVbnVzZWQvUmVzZXJ2ZWQgYml0cyBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19DTlRSTDFfUkVTRVJWRUQJCQkJKDB4ZmUwMGY4ZjApCisKKy8qIEkyQ19DTlRSTDIgOiBSZXNldCBWYWx1ZSAqLworI2RlZmluZSBJMkNfQ05UUkwyX1JFU0VUX1ZBTFVFCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfQ05UUkwyIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfQ05UUkwyX1NJWkUJCQkJCSgweDAwMDAwMDAzKQorI2RlZmluZSBJMkNfQ05UUkwyX0xBTkUJCQkJCSgweDAwMDAwMDBjKQorI2RlZmluZSBJMkNfQ05UUkwyX01VTFRJQllURQkJCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9TVEFSVAkJCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9XUl9TVEFUVVMJCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIEkyQ19DTlRSTDJfUkRfU1RBVFVTCQkJCSgweDAwMDIwMDAwKQorI2RlZmluZSBJMkNfQ05UUkwyX0kyQ19UT19FUlIJCQkJKDB4MDQwMDAwMDApCisjZGVmaW5lIEkyQ19DTlRSTDJfSTJDX0NGR0VSUgkJCQkoMHgwODAwMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9JMkNfQ01QTFQJCQkJKDB4MTAwMDAwMDApCisKKy8qIEkyQ19DTlRSTDIgOiBSZWFkL1dyaXRlIEJpdCBNYXNrIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMl9SV01BU0sJCQkJKDB4MDAwMDAxMWYpCisKKy8qIEkyQ19DTlRSTDIgOiBVbnVzZWQvUmVzZXJ2ZWQgYml0cyBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19DTlRSTDJfUkVTRVJWRUQJCQkJKDB4ZTNmY2ZlZTApCisKKy8qIEkyQ19SRF9EQVRBIDogUmVzZXQgVmFsdWUgKi8KKyNkZWZpbmUgSTJDX1JEX0RBVEFfUkVTRVRfVkFMVUUJCQkJKDB4MDAwMDAwMDApCisKKy8qIEkyQ19SRF9EQVRBIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTAJCQkJKDB4MDAwMDAwZmYpCisjZGVmaW5lIEkyQ19SRF9EQVRBX1JCWVRFMQkJCQkoMHgwMDAwZmYwMCkKKyNkZWZpbmUgSTJDX1JEX0RBVEFfUkJZVEUyCQkJCSgweDAwZmYwMDAwKQorI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTMJCQkJKDB4ZmYwMDAwMDApCisKKy8qIEkyQ19SRF9EQVRBIDogUmVhZC9Xcml0ZSBCaXQgTWFzayBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19SRF9EQVRBX1JXTUFTSwkJCQkoMHgwMDAwMDAwMCkKKworLyogSTJDX1JEX0RBVEEgOiBVbnVzZWQvUmVzZXJ2ZWQgYml0cyBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19SRF9EQVRBX1JFU0VSVkVECQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfVFhfREFUQSA6IFJlc2V0IFZhbHVlICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1JFU0VUX1ZBTFVFCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfVFhfREFUQSA6IFJlZ2lzdGVyIEJpdHMgTWFza3MgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSTJDX1RYX0RBVEFfVEJZVEUwCQkJCSgweDAwMDAwMGZmKQorI2RlZmluZSBJMkNfVFhfREFUQV9UQllURTEJCQkJKDB4MDAwMGZmMDApCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMgkJCQkoMHgwMGZmMDAwMCkKKyNkZWZpbmUgSTJDX1RYX0RBVEFfVEJZVEUzCQkJCSgweGZmMDAwMDAwKQorCisvKiBJMkNfVFhfREFUQSA6IFJlYWQvV3JpdGUgQml0IE1hc2sgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfVFhfREFUQV9SV01BU0sJCQkJKDB4ZmZmZmZmZmYpCisKKy8qIEkyQ19UWF9EQVRBIDogVW51c2VkL1Jlc2VydmVkIGJpdHMgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfVFhfREFUQV9SRVNFUlZFRAkJCQkoMHgwMDAwMDAwMCkKKworI2RlZmluZSBUU0kxMDhfSTJDX09GRlNFVAkweDcwMDAJLyogb2Zmc2V0IGZvciBnZW5lcmFsIHVzZSBJMkMgY2hhbm5lbCAqLworI2RlZmluZSBUU0kxMDhfSTJDX1NEUkFNX09GRlNFVAkweDQ0MDAJLyogb2Zmc2V0IGZvciBTUEQgSTJDIGNoYW5uZWwgKi8KKworI2RlZmluZSBJMkNfRUVQUk9NX0RFVkNPREUJMHhBCS8qIHN0YW5kYXJkIEkyQyBFRVBST00gZGV2aWNlIGNvZGUgKi8KKworLyogSTJDIHN0YXR1cyBjb2RlcyAqLworCisjZGVmaW5lIFRTSTEwOF9JMkNfU1VDQ0VTUwkwCisjZGVmaW5lIFRTSTEwOF9JMkNfUEFSQU1fRVJSCTEKKyNkZWZpbmUgVFNJMTA4X0kyQ19USU1FT1VUX0VSUgkyCisjZGVmaW5lIFRTSTEwOF9JMkNfSUZfQlVTWQkzCisjZGVmaW5lIFRTSTEwOF9JMkNfSUZfRVJST1IJNAorCisjZW5kaWYJCS8qIF9UU0kxMDhfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYl9wcGMvZXh0YWJsZS5jIGIvbGliX3BwYy9leHRhYmxlLmMKaW5kZXggZDkyZjE0Mi4uZmU4NTZmZiAxMDA2NDQKLS0tIGEvbGliX3BwYy9leHRhYmxlLmMKKysrIGIvbGliX3BwYy9leHRhYmxlLmMKQEAgLTM3LDYgKzM3LDggQEAKICAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KICAqLwogCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwogc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQogewogCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7CkBAIC01NSwxMCArNTcsMjIgQEAKIAkJbG9uZyBkaWZmOwogCiAJCW1pZCA9IChsYXN0IC0gZmlyc3QpIC8gMiArIGZpcnN0OwotCQlkaWZmID0gbWlkLT5pbnNuIC0gdmFsdWU7Ci0JCWlmIChkaWZmID09IDApCi0JCQlyZXR1cm4gbWlkLT5maXh1cDsKLQkJZWxzZSBpZiAoZGlmZiA8IDApCisJCWlmIChtaWQgPiBDRkdfTU9OSVRPUl9CQVNFKSB7CisJCS8qIGV4Y2VwdGlvbiBvY2N1cnMgaW4gRkxBU0gsIGJlZm9yZSB1LWJvb3QgcmVsb2NhdGlvbi4KKwkJICogTm8gcmVsb2NhdGlvbiBvZmZzZXQgaXMgbmVlZGVkLgorCQkgKi8KKwkJCWRpZmYgPSBtaWQtPmluc24gLSB2YWx1ZTsKKwkJCWlmIChkaWZmID09IDApCisJCQkJcmV0dXJuIG1pZC0+Zml4dXA7CisJCX0gZWxzZSB7CisJCS8qIGV4Y2VwdGlvbiBvY2N1cnMgaW4gUkFNLCBhZnRlciB1LWJvb3QgcmVsb2NhdGlvbi4KKwkJICogQSByZWxvY2F0aW9uIG9mZnNldCBzaG91bGQgYmUgYWRkZWQuCisJCSAqLworCQkJZGlmZiA9IChtaWQtPmluc24gKyBnZC0+cmVsb2Nfb2ZmKSAtIHZhbHVlOworCQkJaWYgKGRpZmYgPT0gMCkKKwkJCQlyZXR1cm4gKG1pZC0+Zml4dXAgKyBnZC0+cmVsb2Nfb2ZmKTsKKwkJfQorCQlpZiAoZGlmZiA8IDApCiAJCQlmaXJzdCA9IG1pZCsxOwogCQllbHNlCiAJCQlsYXN0ID0gbWlkLTE7CkBAIC03NSw4ICs4OSwxMSBAQAogCiAJLyogVGhlcmUgaXMgb25seSB0aGUga2VybmVsIHRvIHNlYXJjaC4gICovCiAJcmV0ID0gc2VhcmNoX29uZV90YWJsZShfX3N0YXJ0X19fZXhfdGFibGUsIF9fc3RvcF9fX2V4X3RhYmxlLTEsIGFkZHIpOworCS8qIGlmIHRoZSBzZXJpYWwgcG9ydCBkb2VzIG5vdCBoYW5nIGluIGV4Y2VwdGlvbiwgcHJpbnRmIGNhbiBiZSB1c2VkICovCisjaWYgIWRlZmluZWQoQ0ZHX1NFUklBTF9IQU5HX0lOX0VYQ0VQVElPTikKIAlpZiAoZXhfdGFiX21lc3NhZ2UpCiAJCXByaW50ZigiQnVzIEZhdWx0IEAgMHglMDhseCwgZml4dXAgMHglMDhseFxuIiwgYWRkciwgcmV0KTsKKyNlbmRpZgogCWlmIChyZXQpIHJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ldGguYyBiL25ldC9ldGguYwppbmRleCBjY2E5MzkyLi40NDM5MGQyIDEwMDY0NAotLS0gYS9uZXQvZXRoLmMKKysrIGIvbmV0L2V0aC5jCkBAIC01Miw2ICs1Miw3IEBACiBleHRlcm4gaW50IHJ0bDgxNjlfaW5pdGlhbGl6ZShiZF90Kik7CiBleHRlcm4gaW50IHNjY19pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgc2tnZV9pbml0aWFsaXplKGJkX3QqKTsKK2V4dGVybiBpbnQgdHNpMTA4X2V0aF9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgdHNlY19pbml0aWFsaXplKGJkX3QqLCBpbnQsIGNoYXIgKik7CiBleHRlcm4gaW50IG5wZV9pbml0aWFsaXplKGJkX3QgKik7CiBleHRlcm4gaW50IHVlY19pbml0aWFsaXplKGludCk7CkBAIC0yNDksNiArMjUwLDkgQEAKICNpZmRlZiBDT05GSUdfTlM4MzgyWAogCW5zODM4MnhfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVFNJMTA4X0VUSCkKKwl0c2kxMDhfZXRoX2luaXRpYWxpemUoYmlzKTsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1JUTDgxMzkpCiAJcnRsODEzOV9pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYK