ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBkOThiNTZmLi5mMTQ4NGVlIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsNTEgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMzoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBKb24gTG9lbGlnZXIKKyAgRml4IHN0eWxlIGlzc3VlcyBwcmltYXJpbHkgaW4gODV4eCBhbmQgODN4eCBib2FyZHMuCisgICAgLSBDKysgY29tbWVudHMKKyAgICAtIFRyYWlsaW5nIHdoaXRlIHNwYWNlCisgICAgLSBJbmRlbnRhdGlvbiBub3QgYnkgVEFCCisgICAgLSBFeGNlc3NpdmUgYW1vdW50IG9mIGVtcHR5IGxpbmVzCisgICAgLSBUcmFpbGluZyBlbXB0eSBsaW5lcworCisqIFBhdGNoIGJ5IFJvbiBBbGRlciwgMTEgSnVsIDIwMDUKKyAgICBBZGQgWGlhbmdodWEgWGlhbyBhbmQgTHVuc2hlbmcgV2FuZydzIHN1cHBvcnQgZm9yIHRoZQorICAgIEdEQSBNUEM4NTQwIEVWQUwgYm9hcmQuCisKKyogUGF0Y2ggYnkgRXJhbiBMaWJlcnR5CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzgzNDlBRFMgYm9hcmQuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyNSBKdWwgMjAwNQorICBNb3ZlIHRoZSBUU0VDIGRyaXZlciBvdXQgb2YgY3B1L21wYzg1eHggYXMgaXQgd2lsbCBiZSBzaGFyZWQKKyAgYnkgdGhlIHVwY29taW5nIG1wYzgzeHggZmFtaWx5IGFzIHdlbGwuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwNSBNYXkgMjAwNQorICBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBNUEM4NTQ4Q0RTIGJvYXJkLgorICBBZGRlZCBERFIgSUkgc3VwcG9ydCBiYXNlZCBvbiBTUEQgdmFsdWVzIGZvciBNUEM4NXh4IGJvYXJkcy4KKyAgVGhpcyByb2xsLXVwIHBhdGNoIGFsc28gaW5jbHVkZXMgYnVnZmllcyBmb3IgdGhlIHByZXZpb3VzbHkKKyAgcHVibGlzaGVkIHBhdGNoZXM6CisgICAgRERSSUkgQ1BPLCBwcmUgZVRTRUMsIDg1NDggTEJJVSwgQW5keSdzIFRTRUMsIGVUU0VDIDMmNCBJL08KKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDEwIEZlYiAyMDA1CisgIEFkZCBjb25maWcgb3B0aW9uIENPTkZJR19IQVNfRkVDIGNhbGxpbmcgb3V0IDg1NDAgRkVDIGZlYXR1cmVzLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSwgMDggRmViIDIwMDUKKyAgRm9yIE1QQzg1eHhDRFM6CisgICAgQWRkcyBSZWxheGVkIFRpbWluZyBUUkxYIGJpdCB0byBGTEFTSCBPUnggcmVncyB0byBhbGxvdworICAgIGZvciBmYXN0ZXIgZmxhc2ggcGFydHMuCisgICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIEJSL09SIGZvciBGTEFTSC4KKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIgMDggRmViIDIwMDUKKyAgRGV0ZXJtaW5lIEwyIENhY2hlIHNpemUgZHluYW1pY2FsbHkgb24gODVYWCBib2FyZHMuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhIDA4IEZlYiAyMDA1CisgIC0gQ29udmVydCB0aGUgQ1BNMiBiYXNlZCBmdW5jdGlvbmFsaXR5IHRvIHVzZSBuZXcgQ09ORklHX0NQTTIKKyAgICBvcHRpb24gcmF0aGVyIHRoYW4gYSBteXJpYWQgb2YgQ09ORklHX01QQzg1NjAtbGlrZSB2YXJpYW50cy4KKyAgICBBcHBsaWVzIHRvIE1QQzg1eHggYW5kIE1QQzgyNjAgYm9hcmRzLCBpbmNsdWRlcyBzdHhncDMgYW5kIHNiYzg1NjAuCisgICAgRWxpbWluYXRlcyB0aGUgQ09ORklHX01QQzg1NjAgb3B0aW9uIGVudGlyZWx5LiAgRGlzdHJpYnV0ZXMgdGhlCisgICAgbmV3IENPTkZJR19DUE0yIG9wdGlvbiB0byBlYWNoIDgyNjAgYm9hcmQuCisKICogQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU2IGJvYXJkCiAgIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKIApkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggZjkzNDA5MS4uMmQwYzA5NiAxMDA3NTUKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC0xMDgsMTMgKzEwOCwyMiBAQAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBNUEM4M3h4IFN5c3RlbXMgKGluY2x1ZGVzIDgzNDksIGV0Yy4pCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0xJU1RfODN4eD0iCVwKKwlNUEM4MzQ5QURTCVwKKyIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM4NXh4IFN5c3RlbXMgKGluY2x1ZGVzIDg1NDAsIDg1NjAgZXRjLikKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTElTVF84NXh4PSIJXAotCU1QQzg1NDBBRFMJTVBDODU0MUNEUwlNUEM4NTU1Q0RTCU1QQzg1NjBBRFMJXAotCVBNODU0CQlQTTg1NgkJc2JjODU0MAkJc2JjODU2MAkJXAotCXN0eGdwMwkJVFFNODU0MAkJCQkJCVwKKwlNUEM4NTQwQURTCU1QQzg1NDBFVkFMCU1QQzg1NDFDRFMJTVBDODU0OENEUwlcCisJTVBDODU1NUNEUwlNUEM4NTYwQURTCVBNODU0CQlQTTg1NgkJXAorCXNiYzg1NDAJCXNiYzg1NjAJCXN0eGdwMwkJVFFNODU0MAkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMzMsNiArMTQyLDcgQEAKIExJU1RfcHBjPSIke0xJU1RfNXh4fSAgJHtMSVNUXzV4eHh9CQlcCiAJICAke0xJU1RfOHh4fQkJCQlcCiAJICAke0xJU1RfODIyMH0gJHtMSVNUXzgyNHh9ICR7TElTVF84MjYwfSBcCisJICAke0xJU1RfODN4eH0JCQkJXAogCSAgJHtMSVNUXzg1eHh9CQkJCVwKIAkgICR7TElTVF80eHh9CQkJCVwKIAkgICR7TElTVF83NHh4fSAke0xJU1RfN3h4fSIKQEAgLTI1MCw3ICsyNjAsNyBAQAogZm9yIGFyZyBpbiAkQAogZG8KIAljYXNlICIkYXJnIiBpbgotCXBwY3w1eHh8NXh4eHw4eHh8ODIyMHw4MjR4fDgyNjB8ODV4eHw0eHh8N3h4fDc0eHh8IFwKKwlwcGN8NXh4fDV4eHh8OHh4fDgyMjB8ODI0eHw4MjYwfDgzeHh8ODV4eHw0eHh8N3h4fDc0eHh8IFwKIAlhcm18U0F8QVJNN3xBUk05fEFSTTExfHB4YXxpeHB8IFwKIAltaWNyb2JsYXplfCBcCiAJbWlwc3wgXApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBhMzcyZmU5Li44ZmI2MDBkIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNTQsNyArNTQsNyBAQAogQ1JPU1NfQ09NUElMRSA9CiBlbHNlCiBpZmVxICgkKEFSQ0gpLHBwYykKLUNST1NTX0NPTVBJTEUgPSBwcGNfOHh4LQorQ1JPU1NfQ09NUElMRSA9IHBvd2VycGMtbGludXgtCiBlbmRpZgogaWZlcSAoJChBUkNIKSxhcm0pCiBDUk9TU19DT01QSUxFID0gYXJtLWxpbnV4LQpAQCAtOTcsNiArOTcsOSBAQAogaWZlcSAoJChDUFUpLHBwYzR4eCkKIE9CSlMgKz0gY3B1LyQoQ1BVKS9yZXNldHZlYy5vCiBlbmRpZgoraWZlcSAoJChDUFUpLG1wYzgzeHgpCitPQkpTICs9IGNwdS8kKENQVSkvcmVzZXR2ZWMubworZW5kaWYKIGlmZXEgKCQoQ1BVKSxtcGM4NXh4KQogT0JKUyArPSBjcHUvJChDUFUpL3Jlc2V0dmVjLm8KIGVuZGlmCkBAIC0xMTkzLDE4ICsxMTk2LDQ4IEBACiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgdGFzcmVnIGVzZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBNUEM4M3h4IFN5c3RlbXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTVBDODM0OUFEU19jb25maWc6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODN4eCBtcGM4MzQ5YWRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzg1eHggU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBNUEM4NTQwQURTX2NvbmZpZzoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NDBhZHMKIAorTVBDODU0MEVWQUxfY29uZmlnIFwKK01QQzg1NDBFVkFMXzMzX2NvbmZpZyBcCitNUEM4NTQwRVZBTF82Nl9jb25maWcgXAorTVBDODU0MEVWQUxfMzNfc2xhdmVfY29uZmlnIFwKK01QQzg1NDBFVkFMXzY2X3NsYXZlX2NvbmZpZzogICAgICB1bmNvbmZpZworCUBlY2hvICIiID5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCWlmIFsgIiQoZmluZHN0cmluZyBfMzNfLCRAKSIgXSA7IHRoZW4gXAorCQllY2hvIC1uICIuLi4gMzMgTUh6IFBDSSIgOyBcCisJZWxzZSBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX1NZU0NMS182Nk0iID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAtbiAiLi4uIDY2IE1IeiBQQ0kiIDsgXAorCWZpIDsgXAorCWlmIFsgIiQoZmluZHN0cmluZyBfc2xhdmVfLCRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19QQ0lfU0xBVkUiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiIHNsYXZlIiA7IFwKKwllbHNlIFwKKwkJZWNobyAiIGhvc3QiIDsgXAorCWZpCisJQC4vbWtjb25maWcgLWEgTVBDODU0MEVWQUwgcHBjIG1wYzg1eHggbXBjODU0MGV2YWwKKwogTVBDODU2MEFEU19jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTYwYWRzCiAKIE1QQzg1NDFDRFNfY29uZmlnOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0MWNkcyBjZHMKIAorTVBDODU0OENEU19jb25maWc6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTQ4Y2RzIGNkcworCiBNUEM4NTU1Q0RTX2NvbmZpZzoJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NTVjZHMgY2RzCiAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA2MzI3ZjY0Li45MjgzYzVlIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yODcsMTcgKzI4NywxNyBAQAogCQlDT05GSUdfRUJPTlkJCUNPTkZJR19NT1VTU0UJCUNPTkZJR19TWE5JODU1VAogCQlDT05GSUdfRUxQUEMJCUNPTkZJR19NUEM4MjYwQURTCUNPTkZJR19UUU04MjNMCiAJCUNPTkZJR19FTFBUODYwCQlDT05GSUdfTVBDODU0MEFEUwlDT05GSUdfVFFNODI2MAotCQlDT05GSUdfZXA4MjYwCQlDT05GSUdfTVBDODU2MEFEUwlDT05GSUdfVFFNODUwTAotCQlDT05GSUdfRVJJQwkJQ09ORklHX01VU0VOS0kJCUNPTkZJR19UUU04NTVMCi0JCUNPTkZJR19FU1RFRU0xOTJFCUNPTkZJR19NVlMxCQlDT05GSUdfVFFNODYwTAotCQlDT05GSUdfRVRYMDk0CQlDT05GSUdfTkVUUEhPTkUJCUNPTkZJR19UVFRlY2gKLQkJQ09ORklHX0VWQjY0MjYwCQlDT05GSUdfTkVUVEEJCUNPTkZJR19VVFg4MjQ1Ci0JCUNPTkZJR19GQURTODIzCQlDT05GSUdfTkVUVklBCQlDT05GSUdfVjM3Ci0JCUNPTkZJR19GQURTODUwU0FSCUNPTkZJR19OWDgyMwkJQ09ORklHX1c3T0xNQwotCQlDT05GSUdfRkFEUzg2MFQJCUNPTkZJR19PQ1JUQwkJQ09ORklHX1c3T0xNRwotCQlDT05GSUdfRkxBR0FETQkJQ09ORklHX09SU0cJCUNPTkZJR19XQUxOVVQKLQkJQ09ORklHX0ZQUzg1MEwJCUNPTkZJR19PWEMJCUNPTkZJR19aUEMxOTAwCi0JCUNPTkZJR19GUFM4NjBMCQkJCQlDT05GSUdfWlVNQQorCQlDT05GSUdfZXA4MjYwCQlDT05GSUdfTVBDODU0MEVWQUwJQ09ORklHX1RRTTg1MEwKKwkJQ09ORklHX0VSSUMJCUNPTkZJR19NUEM4NTYwQURTCUNPTkZJR19UUU04NTVMCisJCUNPTkZJR19FU1RFRU0xOTJFCUNPTkZJR19NVVNFTktJCQlDT05GSUdfVFFNODYwTAorCQlDT05GSUdfRVRYMDk0CQlDT05GSUdfTVZTMQkJQ09ORklHX1RUVGVjaAorCQlDT05GSUdfRVZCNjQyNjAJCUNPTkZJR19ORVRQSE9ORQkJQ09ORklHX1VUWDgyNDUKKwkJQ09ORklHX0ZBRFM4MjMJCUNPTkZJR19ORVRUQQkJQ09ORklHX1YzNworCQlDT05GSUdfRkFEUzg1MFNBUglDT05GSUdfTkVUVklBCQlDT05GSUdfVzdPTE1DCisJCUNPTkZJR19GQURTODYwVAkJQ09ORklHX05YODIzCQlDT05GSUdfVzdPTE1HCisJCUNPTkZJR19GTEFHQURNCQlDT05GSUdfT0NSVEMJCUNPTkZJR19XQUxOVVQKKwkJQ09ORklHX0ZQUzg1MEwJCUNPTkZJR19PUlNHCQlDT05GSUdfWlBDMTkwMAorCQlDT05GSUdfRlBTODYwTAkJQ09ORklHX09YQwkJQ09ORklHX1pVTUEKIAogCQlBUk0gYmFzZWQgYm9hcmRzOgogCQktLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE4NiwxNCArMjE4NiwxNCBAQAogCURVRVRfQURTX2NvbmZpZwkJTUJYX2NvbmZpZwkJc2JjODU2MF82Nl9jb25maWcKIAlFQk9OWV9jb25maWcJCU1QQzgyNjBBRFNfY29uZmlnCVNNODUwX2NvbmZpZwogCUVMUFQ4NjBfY29uZmlnCQlNUEM4NTQwQURTX2NvbmZpZwlTUEQ4MjNUU19jb25maWcKLQlFU1RFRU0xOTJFX2NvbmZpZwlNUEM4NTYwQURTX2NvbmZpZwlzdHhncDNfY29uZmlnCi0JRVRYMDk0X2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJU1hOSTg1NVRfY29uZmlnCi0JRkFEUzgyM19jb25maWcJCW9tYXAxNTEwaW5uX2NvbmZpZwlUUU04MjNMX2NvbmZpZwotCUZBRFM4NTBTQVJfY29uZmlnCW9tYXAxNjEwaDJfY29uZmlnCVRRTTg1MExfY29uZmlnCi0JRkFEUzg2MFRfY29uZmlnCQlvbWFwMTYxMGlubl9jb25maWcJVFFNODU1TF9jb25maWcKLQlGUFM4NTBMX2NvbmZpZwkJb21hcDU5MTJvc2tfY29uZmlnCVRRTTg2MExfY29uZmlnCi0JCQkJb21hcDI0MjBoNF9jb25maWcJd2FsbnV0X2NvbmZpZwotCQkJCQkJCVl1a29uODIyMF9jb25maWcKKwlFU1RFRU0xOTJFX2NvbmZpZwlNUEM4NTQwRVZBTF9jb25maWcJc3R4Z3AzX2NvbmZpZworCUVUWDA5NF9jb25maWcJCU1QQzg1NjBBRFNfY29uZmlnCVNYTkk4NTVUX2NvbmZpZworCUZBRFM4MjNfY29uZmlnCQlORVRWSUFfY29uZmlnCQlUUU04MjNMX2NvbmZpZworCUZBRFM4NTBTQVJfY29uZmlnCW9tYXAxNTEwaW5uX2NvbmZpZwlUUU04NTBMX2NvbmZpZworCUZBRFM4NjBUX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJVFFNODU1TF9jb25maWcKKwlGUFM4NTBMX2NvbmZpZwkJb21hcDE2MTBpbm5fY29uZmlnCVRRTTg2MExfY29uZmlnCisJCQkJb21hcDU5MTJvc2tfY29uZmlnCXdhbG51dF9jb25maWcKKwkJCQlvbWFwMjQyMGg0X2NvbmZpZwlZdWtvbjgyMjBfY29uZmlnCiAJCQkJCQkJWlBDMTkwMF9jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYyBiL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYwppbmRleCBjNzVhNGRmLi42YjhhYTY4IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy9tcGM4NTQxY2RzLmMKKysrIGIvYm9hcmQvY2RzL21wYzg1NDFjZHMvbXBjODU0MWNkcy5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiLi4vY29tbW9uL2NhZG11cy5oIgogI2luY2x1ZGUgIi4uL2NvbW1vbi9lZXByb20uaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogZXh0ZXJuIHZvaWQgZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSk7CiAjZW5kaWYKIApAQCAtMjcxLDcgKzI3MSw3IEBACiAjZW5kaWYKIAlkcmFtX3NpemUgPSBzcGRfc2RyYW0oKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogCS8qCiAJICogSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIEREUiBFQ0MuCiAJICovCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0MWNkcy91LWJvb3QubGRzIGIvYm9hcmQvY2RzL21wYzg1NDFjZHMvdS1ib290LmxkcwppbmRleCBmOGNlZTUzLi5iZDY5N2Q4IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKQEAgLTY5LDcgKzY5LDYgQEAKICAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKLSAgICBjcHUvbXBjODV4eC90c2VjLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3NwZWVkLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3BjaS5vICgudGV4dCkKICAgICBjb21tb24vZGxtYWxsb2MubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0OGNkcy9NYWtlZmlsZSBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGFiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jZHMvbXBjODU0OGNkcy9NYWtlZmlsZQpAQCAtMCwwICsxLDUxIEBACisjCisjIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSAkKEJPQVJEKS5vIFwKKwkgICAuLi9jb21tb24vY2FkbXVzLm8gXAorCSAgIC4uL2NvbW1vbi9lZXByb20ubworCitTT0JKUwk6PSBpbml0Lm8KKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChPQkpTKSAkKFNPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKKy1pbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvY29uZmlnLm1rIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MmE2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jZHMvbXBjODU0OGNkcy9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBtcGM4NTQ4Y2RzIGJvYXJkCisjCitURVhUX0JBU0UgPSAweGZmZjgwMDAwCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0U1MDA9MQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODV4eD0xCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NTQ4PTEKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2luaXQuUyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RjZDBkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvaW5pdC5TCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgMjAwMiwyMDAzLCBNb3Rvcm9sYSBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxtcGM4NXh4Lmg+CisKKworLyoKKyAqIFRMQjAgYW5kIFRMQjEgRW50cmllcworICoKKyAqIE91dCBvZiByZXNldCwgVExCMSdzIEVudHJ5IDAgbWFwcyB0aGUgaGlnaGVzdCA0SyBmb3IgQ0NTUkJBUi4KKyAqIEhvd2V2ZXIsIENDU1JCQVIgaXMgdGhlbiByZWxvY2F0ZWQgdG8gQ0ZHX0NDU1JCQVIgcmlnaHQgYWZ0ZXIKKyAqIHRoZXNlIFRMQiBlbnRyaWVzIGFyZSBlc3RhYmxpc2hlZC4KKyAqCisgKiBUaGUgVExCIGVudHJpZXMgZm9yIEREUiBhcmUgZHluYW1pY2FsbHkgc2V0dXAgaW4gc3BkX3NkcmFtKCkKKyAqIGFuZCB1c2UgVExCMSBFbnRyaWVzIDggdGhyb3VnaCAxNSBhcyBuZWVkZWQgYWNjb3JkaW5nIHRvIHRoZQorICogc2l6ZSBvZiBERFIgbWVtb3J5LgorICoKKyAqIE1BUzA6IHRsYnNlbCwgZXNlbCwgbnYKKyAqIE1BUzE6IHZhbGlkLCBpcHJvdCwgdGlkLCB0cywgdHNpemUKKyAqIE1BUzI6IGVwbiwgc2hhcmVuLCB4MCwgeDEsIHcsIGksIG0sIGcsIGUKKyAqIE1BUzM6IHJwbiwgdTAtdTMsIHV4LCBzeCwgdXcsIHN3LCB1ciwgc3IKKyAqLworCisjZGVmaW5lCWVudHJ5X3N0YXJ0IFwKKwltZmxyCXIxIAk7CVwKKwlibAkwZiAJOworCisjZGVmaW5lCWVudHJ5X2VuZCBcCiswOgltZmxyCXIwCTsJXAorCW10bHIJcjEJOwlcCisJYmxyCQk7CisKKworCS5zZWN0aW9uCS5ib290cGcsICJheCIKKwkuZ2xvYmwJdGxiMV9lbnRyeQordGxiMV9lbnRyeToKKwllbnRyeV9zdGFydAorCisJLyoKKwkgKiBOdW1iZXIgb2YgVExCMCBhbmQgVExCMSBlbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgdGFibGUKKwkgKi8KKwkubG9uZyAxMworCisjaWYgKENGR19DQ1NSQkFSX0RFRkFVTFQgIT0gQ0ZHX0NDU1JCQVIpCisJLyoKKwkgKiBUTEIwCQk0SwlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmZjcwMDAwMAk0SwlJbml0aWFsIENDU1JCQVIgbWFwcGluZworCSAqCisJICogVGhpcyBlbmRzIHVwIGF0IGEgVExCMCBJbmRleD09MCBlbnRyeSwgYW5kIG11c3Qgbm90IGNvbGxpZGUKKwkgKiB3aXRoIG90aGVyIFRMQjAgRW50cmllcy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSX0RFRkFVTFQpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfQ0NTUkJBUl9ERUZBVUxUKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKyNlbHNlCisjZXJyb3IoIlVwZGF0ZSB0aGUgbnVtYmVyIG9mIHRhYmxlIGVudHJpZXMgaW4gdGxiMV9lbnRyeSIpCisjZW5kaWYKKworCS8qCisJICogVExCMAkJMTZLCUNhY2hlYWJsZSwgbm9uLWd1YXJkZWQKKwkgKiAweGQwMDFfMDAwMAkxNksJVGVtcG9yYXJ5IEdsb2JhbCBkYXRhIGZvciBpbml0aWFsaXphdGlvbgorCSAqCisJICogVXNlIGZvdXIgNEsgVExCMCBlbnRyaWVzLiAgVGhlc2UgZW50cmllcyBtdXN0IGJlIGNhY2hlYWJsZQorCSAqIGFzIHRoZXkgcHJvdmlkZSB0aGUgYm9vdHN0cmFwIG1lbW9yeSBiZWZvcmUgdGhlIG1lbW9yeQorCSAqIGNvbnRyb2xlciBhbmQgcmVhbCBtZW1vcnkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBUaGVzZSBlbnRyaWVzIGVuZCB1cCBhdCBUTEIwIEluZGljaWVzIDB4MTAsIDB4MTQsIDB4MTggYW5kIDB4MWMsCisJICogYW5kIG11c3Qgbm90IGNvbGxpZGUgd2l0aCBvdGhlciBUTEIwIGVudHJpZXMuCisJICovCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiksCisJCQkwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiArIDQgKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19JTklUX1JBTV9BRERSICsgNCAqIDEwMjQpLAorCQkJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAwLCAwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA4ICogMTAyNCksCisJCQkwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiArIDggKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19JTklUX1JBTV9BRERSICsgMTIgKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19JTklUX1JBTV9BRERSICsgMTIgKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKworCS8qCisJICogVExCIDA6CTE2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmZjAwMDAwMAkxNk0JRkxBU0gKKwkgKiBPdXQgb2YgcmVzZXQgdGhpcyBlbnRyeSBpcyBvbmx5IDRLLgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMTZNKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0ZMQVNIX0JBU0UpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfRkxBU0hfQkFTRSksIDAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkvKgorCSAqIFRMQiAxOgkyNTZNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweDgwMDAwMDAwCTI1Nk0JUENJMSBNRU0gRmlyc3QgaGFsZgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAxLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kxX01FTV9CQVNFKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSTFfTUVNX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgMjoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHg5MDAwMDAwMAkyNTZNCVBDSTEgTUVNIFNlY29uZCBoYWxmCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDIsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX1BDSTFfTUVNX0JBU0UgKyAweDEwMDAwMDAwKSwKKwkJCTAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kxX01FTV9CQVNFICsgMHgxMDAwMDAwMCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgMzoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhhMDAwMDAwMAkyNTZNCVBDSTIgTUVNIEZpcnN0IGhhbGYKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMywgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzI1Nk0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfUENJMl9NRU1fQkFTRSksIDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kyX01FTV9CQVNFKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCIDQ6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4YjAwMDAwMDAJMjU2TQlQQ0kyIE1FTSBTZWNvbmQgaGFsZgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCA0LCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kyX01FTV9CQVNFICsgMHgxMDAwMDAwMCksCisJCQkwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfUENJMl9NRU1fQkFTRSArIDB4MTAwMDAwMDApLAorCQkJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCIDU6CTY0TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhlMDAwXzAwMDAJMU0JQ0NTUkJBUgorCSAqIDB4ZTIwMF8wMDAwCTE2TQlQQ0kxIElPCisJICogMHhlMzAwXzAwMDAJMTZNCVBDSTIgSU8KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgNSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0NDU1JCQVIpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgNjoJNjRNCUNhY2hlYWJsZSwgbm9uLWd1YXJkZWQKKwkgKiAweGYwMDBfMDAwMAk2NE0JTEJDIFNEUkFNCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDYsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl82NE0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfTEJDX1NEUkFNX0JBU0UpLCAwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfTEJDX1NEUkFNX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgNzoJMU0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ZjgwMDAwMDAJMU0JQ0FETVVTIHJlZ2lzdGVycworCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCA3LCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMU0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDQURNVVNfQkFTRV9BRERSKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0FETVVTX0JBU0VfQUREUiksIDAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwllbnRyeV9lbmQKKworLyoKKyAqIExBVyhMb2NhbCBBY2Nlc3MgV2luZG93KSBjb25maWd1cmF0aW9uOgorICoKKyAqIDB4MDAwMF8wMDAwICAgICAweDdmZmZfZmZmZiAgICAgRERSICAgICAgICAgICAgICAgICAgICAgMkcKKyAqIDB4ODAwMF8wMDAwICAgICAweDlmZmZfZmZmZiAgICAgUENJMSBNRU0gICAgICAgICAgICAgICAgNTEyTQorICogMHhhMDAwXzAwMDAgICAgIDB4YmZmZl9mZmZmICAgICBQQ0kyIE1FTSAgICAgICAgICAgICAgICA1MTJNCisgKiAweGUwMDBfMDAwMCAgICAgMHhlMDAwX2ZmZmYgICAgIENDU1IgICAgICAgICAgICAgICAgICAgIDFNCisgKiAweGUyMDBfMDAwMCAgICAgMHhlMmZmX2ZmZmYgICAgIFBDSTEgSU8gICAgICAgICAgICAgICAgIDE2TQorICogMHhlMzAwXzAwMDAgICAgIDB4ZTNmZl9mZmZmICAgICBQQ0kyIElPICAgICAgICAgICAgICAgICAxNk0KKyAqIDB4ZjAwMF8wMDAwICAgICAweGY3ZmZfZmZmZiAgICAgU0RSQU0gICAgICAgICAgICAgICAgICAgMTI4TQorICogMHhmODAwXzAwMDAgICAgIDB4ZjgwZl9mZmZmICAgICBOVlJBTS9DQURNVVMgKCopICAgICAgICAxTQorICogMHhmZjAwXzAwMDAgICAgIDB4ZmY3Zl9mZmZmICAgICBGTEFTSCAoMm5kIGJhbmspICAgICAgICA4TQorICogMHhmZjgwXzAwMDAgICAgIDB4ZmZmZl9mZmZmICAgICBGTEFTSCAoYm9vdCBiYW5rKSAgICAgICA4TQorICoKKyAqIE5vdGVzOgorICogICAgQ0NTUkJBUiBhbmQgTDItYXMtU1JBTSBkb24ndCBuZWVkIGEgY29uZmlndXJlZCBMb2NhbCBBY2Nlc3MgV2luZG93LgorICogICAgSWYgZmxhc2ggaXMgOE0gYXQgZGVmYXVsdCBwb3NpdGlvbiAobGFzdCA4TSksIG5vIExBVyBuZWVkZWQuCisgKgorICogVGhlIGRlZmluZXMgYmVsb3cgYXJlIDEtb2ZmIG9mIHRoZSBhY3R1YWwgTEFXQVIwIHVzYWdlLgorICogU28gTEFXQVIzIGRlZmluZSB1c2VzIHRoZSBMQVdBUjQgcmVnaXN0ZXIgaW4gdGhlIEVDTS4KKyAqLworCisjZGVmaW5lIExBV0JBUjAgMAorI2RlZmluZSBMQVdBUjAgICgoTEFXQVJfVFJHVF9JRl9ERFIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTI4TSkpICYgfkxBV0FSX0VOKQorCisjZGVmaW5lIExBV0JBUjEgKChDRkdfUENJMV9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIxIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkpCisKKyNkZWZpbmUgTEFXQkFSMiAoKENGR19QQ0kyX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjIgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKKworI2RlZmluZSBMQVdCQVIzICgoQ0ZHX1BDSTFfSU9fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIzIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTZNKSkKKworI2RlZmluZSBMQVdCQVI0ICgoQ0ZHX1BDSTJfSU9fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI0IAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTZNKSkKKworLyogTEJDIHdpbmRvdyAtIG1hcHMgMjU2TSAweGYwMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KKyNkZWZpbmUgTEFXQkFSNSAoKENGR19MQkNfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI1IAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKSkKKworCS5zZWN0aW9uIC5ib290cGcsICJheCIKKwkuZ2xvYmwJbGF3X2VudHJ5CisKK2xhd19lbnRyeToKKwllbnRyeV9zdGFydAorCS5sb25nIDYKKwkubG9uZyBMQVdCQVIwLExBV0FSMCxMQVdCQVIxLExBV0FSMSxMQVdCQVIyLExBV0FSMixMQVdCQVIzLExBV0FSMworCS5sb25nIExBV0JBUjQsTEFXQVI0LExBV0JBUjUsTEFXQVI1CisJZW50cnlfZW5kCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMgYi9ib2FyZC9jZHMvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMDg5MAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYwpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBTY290dCBNY051dHQgPHNtY251dHRAYXJ0ZXN5bmNwLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CisjaW5jbHVkZSA8c3BkLmg+CisKKyNpbmNsdWRlICIuLi9jb21tb24vY2FkbXVzLmgiCisjaW5jbHVkZSAiLi4vY29tbW9uL2VlcHJvbS5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorZXh0ZXJuIHZvaWQgZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSk7CisjZW5kaWYKKworZXh0ZXJuIGxvbmcgaW50IHNwZF9zZHJhbSh2b2lkKTsKKwordm9pZCBsb2NhbF9idXNfaW5pdCh2b2lkKTsKK3ZvaWQgc2RyYW1faW5pdCh2b2lkKTsKKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKworCS8qIFBDSSBzbG90IGluIFVTRVIgYml0cyBDU1JbNjo3XSBieSBjb252ZW50aW9uLiAqLworCXVpbnQgcGNpX3Nsb3QgPSBnZXRfcGNpX3Nsb3QgKCk7CisKKwl1aW50IHBjaV9kdWFsID0gZ2V0X3BjaV9kdWFsICgpOwkvKiBQQ0kgRFVBTCBpbiBDTV9QQ0lbM10gKi8KKwl1aW50IHBjaTFfMzIgPSBndXItPnBvcmRldnNyICYgMHgxMDAwMDsJLyogUE9SREVWU1JbMTVdICovCisJdWludCBwY2kxX2Nsa19zZWwgPSBndXItPnBvcnBsbHNyICYgMHg4MDAwOwkvKiBQT1JQTExTUlsxNl0gKi8KKwl1aW50IHBjaTJfY2xrX3NlbCA9IGd1ci0+cG9ycGxsc3IgJiAweDQwMDA7CS8qIFBPUlBMTFNSWzE3XSAqLworCisJdWludCBwY2kxX3NwZWVkID0gZ2V0X2Nsb2NrX2ZyZXEgKCk7CS8qIFBDSSBQU1BFRUQgaW4gWzQ6NV0gKi8KKworCXVpbnQgY3B1X2JvYXJkX3JldiA9IGdldF9jcHVfYm9hcmRfcmV2aXNpb24gKCk7CisKKwlwcmludGYgKCJCb2FyZDogQ0RTIFZlcnNpb24gMHglMDJ4LCBQQ0kgU2xvdCAlZFxuIiwKKwkJZ2V0X2JvYXJkX3ZlcnNpb24gKCksIHBjaV9zbG90KTsKKworCXByaW50ZiAoIkNQVSBCb2FyZCBSZXZpc2lvbiAlZC4lZCAoMHglMDR4KVxuIiwKKwkJTVBDODVYWF9DUFVfQk9BUkRfTUFKT1IgKGNwdV9ib2FyZF9yZXYpLAorCQlNUEM4NVhYX0NQVV9CT0FSRF9NSU5PUiAoY3B1X2JvYXJkX3JldiksIGNwdV9ib2FyZF9yZXYpOworCisJcHJpbnRmICgiICAgIFBDSTE6ICVkIGJpdCwgJXMgTUh6LCAlc1xuIiwKKwkJKHBjaTFfMzIpID8gMzIgOiA2NCwKKwkJKHBjaTFfc3BlZWQgPT0gMzMwMDAwMDApID8gIjMzIiA6CisJCShwY2kxX3NwZWVkID09IDY2MDAwMDAwKSA/ICI2NiIgOiAidW5rbm93biIsCisJCXBjaTFfY2xrX3NlbCA/ICJzeW5jIiA6ICJhc3luYyIpOworCisJaWYgKHBjaV9kdWFsKSB7CisJCXByaW50ZiAoIiAgICBQQ0kyOiAzMiBiaXQsIDY2IE1IeiwgJXNcbiIsCisJCQlwY2kyX2Nsa19zZWwgPyAic3luYyIgOiAiYXN5bmMiKTsKKwl9IGVsc2UgeworCQlwcmludGYgKCIgICAgUENJMjogZGlzYWJsZWRcbiIpOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBsb2NhbCBidXMuCisJICovCisJbG9jYWxfYnVzX2luaXQgKCk7CisKKworCS8qCisJICogSGFjayBUU0VDIDMgYW5kIDQgSU8gdm9sdGFnZXMuCisJICovCisJZ3VyLT50c2VjMzRpb292Y3IgPSAweGU3ZTA7CS8qICAxMTEwIDAxMTEgMTExMCAweHh4ICovCisKKwlyZXR1cm4gMDsKK30KKworbG9uZyBpbnQKK2luaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCWxvbmcgZHJhbV9zaXplID0gMDsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisKKwlwdXRzKCJJbml0aWFsaXppbmdcbiIpOworCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKKwl7CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIHRvIHN0YWJpbGl6ZSBERFIgRExMIE1TWU5DX0lOLgorCQkgKiBFcnJhdGEgRERSOSBzZWVtcyB0byBoYXZlIGJlZW4gZml4ZWQuCisJCSAqIFRoaXMgaXMgbm93IHRoZSB3b3JrYXJvdW5kIGZvciBFcnJhdGEgRERSMTE6CisJCSAqICAgIE92ZXJyaWRlIERMTCA9IDEsIENvdXJzZSBBZGogPSAxLCBUYXAgU2VsZWN0ID0gMAorCQkgKi8KKworCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCisJCWd1ci0+ZGRyZGxsY3IgPSAweDgxMDAwMDAwOworCQlhc20oInN5bmM7aXN5bmM7bXN5bmMiKTsKKwkJdWRlbGF5KDIwMCk7CisJfQorI2VuZGlmCisJZHJhbV9zaXplID0gc3BkX3NkcmFtKCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCisJLyoKKwkgKiBJbml0aWFsaXplIGFuZCBlbmFibGUgRERSIEVDQy4KKwkgKi8KKwlkZHJfZW5hYmxlX2VjYyhkcmFtX3NpemUpOworI2VuZGlmCisJLyoKKwkgKiBTRFJBTSBJbml0aWFsaXphdGlvbgorCSAqLworCXNkcmFtX2luaXQoKTsKKworCXB1dHMoIiAgICBERFI6ICIpOworCXJldHVybiBkcmFtX3NpemU7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIExvY2FsIEJ1cworICovCit2b2lkCitsb2NhbF9idXNfaW5pdCh2b2lkKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKworCXVpbnQgY2xrZGl2OworCXVpbnQgbGJjX2h6OworCXN5c19pbmZvX3Qgc3lzaW5mbzsKKworCWdldF9zeXNfaW5mbygmc3lzaW5mbyk7CisJY2xrZGl2ID0gKGxiYy0+bGNyciAmIDB4MGYpICogMjsKKwlsYmNfaHogPSBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwIC8gY2xrZGl2OworCisJZ3VyLT5sYml1aXBsbGRjcjEgPSAweDAwMDc4MDgwOworCWlmIChjbGtkaXYgPT0gMTYpIHsKKwkJZ3VyLT5sYml1aXBsbGRjcjAgPSAweDdjMGYxYmYwOworCX0gZWxzZSBpZiAoY2xrZGl2ID09IDgpIHsKKwkJZ3VyLT5sYml1aXBsbGRjcjAgPSAweDZjMGYxYmYwOworCX0gZWxzZSBpZiAoY2xrZGl2ID09IDQpIHsKKwkJZ3VyLT5sYml1aXBsbGRjcjAgPSAweDVjMGYxYmYwOworCX0KKworCWxiYy0+bGNyciB8PSAweDAwMDMwMDAwOworCisJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIFNEUkFNIG1lbW9yeSBvbiB0aGUgTG9jYWwgQnVzLgorICovCit2b2lkCitzZHJhbV9pbml0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDRkdfT1IyX1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfQlIyX1BSRUxJTSkKKworCXVpbnQgaWR4OworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKwl1aW50ICpzZHJhbV9hZGRyID0gKHVpbnQgKilDRkdfTEJDX1NEUkFNX0JBU0U7CisJdWludCBjcHVfYm9hcmRfcmV2OworCXVpbnQgbHNkbXJfY29tbW9uOworCisJcHV0cygiICAgIFNEUkFNOiAiKTsKKworCXByaW50X3NpemUgKENGR19MQkNfU0RSQU1fU0laRSAqIDEwMjQgKiAxMDI0LCAiXG4iKTsKKworCS8qCisJICogU2V0dXAgU0RSQU0gQmFzZSBhbmQgT3B0aW9uIFJlZ2lzdGVycworCSAqLworCWxiYy0+b3IyID0gQ0ZHX09SMl9QUkVMSU07CisJYXNtKCJtc3luYyIpOworCisJbGJjLT5icjIgPSBDRkdfQlIyX1BSRUxJTTsKKwlhc20oIm1zeW5jIik7CisKKwlsYmMtPmxiY3IgPSBDRkdfTEJDX0xCQ1I7CisJYXNtKCJtc3luYyIpOworCisKKwlsYmMtPmxzcnQgPSBDRkdfTEJDX0xTUlQ7CisJbGJjLT5tcnRwciA9IENGR19MQkNfTVJUUFI7CisJYXNtKCJtc3luYyIpOworCisJLyoKKwkgKiBNUEM4NTQ4IHVzZXMgIm5ldyIgMTUtMTYgc3R5bGUgYWRkcmVzc2luZy4KKwkgKi8KKwljcHVfYm9hcmRfcmV2ID0gZ2V0X2NwdV9ib2FyZF9yZXZpc2lvbigpOworCWxzZG1yX2NvbW1vbiA9IENGR19MQkNfTFNETVJfQ09NTU9OOworCWxzZG1yX2NvbW1vbiB8PSBDRkdfTEJDX0xTRE1SX0JTTUExNTE2OworCisJLyoKKwkgKiBJc3N1ZSBQUkVDSEFSR0UgQUxMIGNvbW1hbmQuCisJICovCisJbGJjLT5sc2RtciA9IGxzZG1yX2NvbW1vbiB8IENGR19MQkNfTFNETVJfT1BfUENIQUxMOworCWFzbSgic3luYzttc3luYyIpOworCSpzZHJhbV9hZGRyID0gMHhmZjsKKwlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSBzZHJhbV9hZGRyKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qCisJICogSXNzdWUgOCBBVVRPIFJFRlJFU0ggY29tbWFuZHMuCisJICovCisJZm9yIChpZHggPSAwOyBpZHggPCA4OyBpZHgrKykgeworCQlsYmMtPmxzZG1yID0gbHNkbXJfY29tbW9uIHwgQ0ZHX0xCQ19MU0RNUl9PUF9BUkZSU0g7CisJCWFzbSgic3luYzttc3luYyIpOworCQkqc2RyYW1fYWRkciA9IDB4ZmY7CisJCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpIHNkcmFtX2FkZHIpOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIDggTU9ERS1zZXQgY29tbWFuZC4KKwkgKi8KKwlsYmMtPmxzZG1yID0gbHNkbXJfY29tbW9uIHwgQ0ZHX0xCQ19MU0RNUl9PUF9NUlc7CisJYXNtKCJzeW5jO21zeW5jIik7CisJKnNkcmFtX2FkZHIgPSAweGZmOworCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpIHNkcmFtX2FkZHIpOworCXVkZWxheSgxMDApOworCisJLyoKKwkgKiBJc3N1ZSBOT1JNQUwgT1AgY29tbWFuZC4KKwkgKi8KKwlsYmMtPmxzZG1yID0gbHNkbXJfY29tbW9uIHwgQ0ZHX0xCQ19MU0RNUl9PUF9OT1JNQUw7CisJYXNtKCJzeW5jO21zeW5jIik7CisJKnNkcmFtX2FkZHIgPSAweGZmOworCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpIHNkcmFtX2FkZHIpOworCXVkZWxheSgyMDApOyAgICAvKiBPdmVya2lsbC4gTXVzdCB3YWl0ID4gMjAwIGJ1cyBjeWNsZXMgKi8KKworI2VuZGlmCS8qIGVuYWJsZSBTRFJBTSBpbml0ICovCit9CisKKyNpZiBkZWZpbmVkKENGR19EUkFNX1RFU1QpCitpbnQKK3Rlc3RkcmFtKHZvaWQpCit7CisJdWludCAqcHN0YXJ0ID0gKHVpbnQgKikgQ0ZHX01FTVRFU1RfU1RBUlQ7CisJdWludCAqcGVuZCA9ICh1aW50ICopIENGR19NRU1URVNUX0VORDsKKwl1aW50ICpwOworCisJcHJpbnRmKCJUZXN0aW5nIERSQU0gZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAorCSAgICAgICBDRkdfTUVNVEVTVF9TVEFSVCwKKwkgICAgICAgQ0ZHX01FTVRFU1RfRU5EKTsKKworCXByaW50ZigiRFJBTSB0ZXN0IHBoYXNlIDE6XG4iKTsKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspCisJCSpwID0gMHhhYWFhYWFhYTsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAoKnAgIT0gMHhhYWFhYWFhYSkgeworCQkJcHJpbnRmICgiRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50ZigiRFJBTSB0ZXN0IHBoYXNlIDI6XG4iKTsKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspCisJCSpwID0gMHg1NTU1NTU1NTsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAoKnAgIT0gMHg1NTU1NTU1NSkgeworCQkJcHJpbnRmICgiRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50ZigiRFJBTSB0ZXN0IHBhc3NlZC5cbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisKKy8qCisgKiBJbml0aWFsaXplIFBDSSBEZXZpY2VzLCByZXBvcnQgZGV2aWNlcyBmb3VuZC4KKyAqLworCisjaWZuZGVmIENPTkZJR19QQ0lfUE5QCitzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX21wYzg1eHhjZHNfY29uZmlnX3RhYmxlW10gPSB7CisgICAgeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorICAgICAgUENJX0lEU0VMX05VTUJFUiwgUENJX0FOWV9JRCwKKyAgICAgIHBjaV9jZmdmdW5jX2NvbmZpZ19kZXZpY2UsIHsgUENJX0VORVQwX0lPQUREUiwKKwkJCQkgICBQQ0lfRU5FVDBfTUVNQUREUiwKKwkJCQkgICBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIKKyAgICAgIH0gfSwKKyAgICB7IH0KK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlID0geworI2lmbmRlZiBDT05GSUdfUENJX1BOUAorCWNvbmZpZ190YWJsZTogcGNpX21wYzg1eHhjZHNfY29uZmlnX3RhYmxlLAorI2VuZGlmCit9OworCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLworCit2b2lkCitwY2lfaW5pdF9ib2FyZCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlleHRlcm4gdm9pZCBwY2lfbXBjODV4eF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CisKKwlwY2lfbXBjODV4eF9pbml0KCZob3NlKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvdS1ib290LmxkcyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkMjQwNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKKyAgeworICAgICooLnJlc2V0dmVjKQorICB9ID0gMHhmZmZmCisKKyAgLmJvb3RwZyAweEZGRkZGMDAwIDoKKyAgeworICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCisgICAgYm9hcmQvY2RzL21wYzg1NDhjZHMvaW5pdC5vICguYm9vdHBnKQorICB9ID0gMHhmZmZmCisKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLnRleHQpCisgICAgYm9hcmQvY2RzL21wYzg1NDhjZHMvaW5pdC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC90cmFwcy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQorICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQorICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9zcGVlZC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9wY2kubyAoLnRleHQpCisgICAgY29tbW9uL2RsbWFsbG9jLm8gKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8gKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vICgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy96bGliLm8gKC50ZXh0KQorICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgIH0KKyAgICBfZXRleHQgPSAuOworICAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgICAgLnJvZGF0YSAgICA6CisgICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NTVjZHMvbXBjODU1NWNkcy5jIGIvYm9hcmQvY2RzL21wYzg1NTVjZHMvbXBjODU1NWNkcy5jCmluZGV4IGE0MGRlMjEuLjE4YWRmNWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL21wYzg1NTVjZHMuYworKysgYi9ib2FyZC9jZHMvbXBjODU1NWNkcy9tcGM4NTU1Y2RzLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICIuLi9jb21tb24vY2FkbXVzLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL2VlcHJvbS5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCiBleHRlcm4gdm9pZCBkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKTsKICNlbmRpZgogCkBAIC0yNjksNyArMjY5LDcgQEAKICNlbmRpZgogCWRyYW1fc2l6ZSA9IHNwZF9zZHJhbSgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCiAJLyoKIAkgKiBJbml0aWFsaXplIGFuZCBlbmFibGUgRERSIEVDQy4KIAkgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL3UtYm9vdC5sZHMgYi9ib2FyZC9jZHMvbXBjODU1NWNkcy91LWJvb3QubGRzCmluZGV4IGQxNGNiOWMuLjVkNDVkMzggMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvY2RzL21wYzg1NTVjZHMvdS1ib290LmxkcwpAQCAtNjksNyArNjksNiBAQAogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1Lm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L3RzZWMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQogICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNDlhZHMvTWFrZWZpbGUgYi9ib2FyZC9tcGM4MzQ5YWRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjdiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4MzQ5YWRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDUgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSAkKEJPQVJEKS5vCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNDlhZHMvY29uZmlnLm1rIGIvYm9hcmQvbXBjODM0OWFkcy9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwMjE2OQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzgzNDlhZHMvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBNUEM4M3h4QURTCisjCisKK1RFWFRfQkFTRSAgPSAgIDB4RkU3MDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNDlhZHMvbXBjODM0OWFkcy5jIGIvYm9hcmQvbXBjODM0OWFkcy9tcGM4MzQ5YWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4ZDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzgzNDlhZHMvbXBjODM0OWFkcy5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogQ2hhbmdlIGxvZzoKKyAqIDIwMDUwMTAxOiBFcmFuIExpYmVydHkgKGxpYmVydHlAZnJlZXNjYWxlLmNvbSkKKyAqICAgICAgICAgICBJbml0aWFsIGZpbGUgY3JlYXRpbmcgKHBvcnRpbmcgZnJvbSA4NVhYICYgODI2MCkKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8aW9wb3J0cy5oPgorI2luY2x1ZGUgPG1wYzgzeHguaD4KKyNpbmNsdWRlIDxhc20vbXBjODM0OV9wY2kuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxzcGQuaD4KKyNpbmNsdWRlIDxtaWlwaHkuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjaW5jbHVkZSA8cGNpLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorI2luY2x1ZGUgPHNwZF9zZHJhbS5oPgorI2VuZGlmCitpbnQgZml4ZWRfc2RyYW0odm9pZCk7Cit2b2lkIHNkcmFtX2luaXQodm9pZCk7CisKK2ludCBib2FyZF9lYXJseV9pbml0X2YgKHZvaWQpCit7CisJdm9sYXRpbGUgdTgqIGJjc3IgPSAodm9sYXRpbGUgdTgqKUNGR19CQ1NSOworCisJLyogRW5hYmxlIGZsYXNoIHdyaXRlICovCisJYmNzclsxXSAmPSB+MHgwMTsKKworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgbnMyY2xrKG5zKSAobnMgLyAoMTAwMDAwMDAwMCAvIENPTkZJR184MzQ5X0NMS0lOKSArIDEpCisKK2xvbmcgaW50IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVJCQVI7CisJdTMyIG1zaXplID0gMDsKKworCWlmICgoaW0tPnN5c2NvbmYuaW1tcmJhciAmIElNTVJCQVJfQkFTRV9BRERSKSAhPSAodTMyKWltKQorCQlyZXR1cm4gLTE7CisKKwkvKiBERFIgU0RSQU0gLSBNYWluIFNPRElNTSAqLworCWltLT5zeXNjb25mLmRkcmxhd1swXS5iYXIgPSBDRkdfRERSX0JBU0UgJiBMQVdCQVJfQkFSOworI2lmIGRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pCisJbXNpemUgPSBzcGRfc2RyYW0oTlVMTCk7CisjZWxzZQorCW1zaXplID0gZml4ZWRfc2RyYW0oKTsKKyNlbmRpZgorCS8qCisJICogSW5pdGlhbGl6ZSBTRFJBTSBpZiBpdCBpcyBvbiBsb2NhbCBidXMuCisJICovCisJc2RyYW1faW5pdCgpOworCXB1dHMoIiAgIEREUiBSQU06ICIpOworCS8qIHJldHVybiB0b3RhbCBidXMgU0RSQU0gc2l6ZShieXRlcykgIC0tIEREUiAqLworCXJldHVybiAobXNpemUgKiAxMDI0ICogMTAyNCk7Cit9CisKKworI2lmICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBmaXhlZCBzZHJhbSBpbml0IC0tIGRvZXNuJ3QgdXNlIHNlcmlhbCBwcmVzZW5jZSBkZXRlY3QuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGZpeGVkX3NkcmFtKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SQkFSOworCXUzMiBtc2l6ZSA9IDA7CisJdTMyIGRkcl9zaXplOworCXUzMiBkZHJfc2l6ZV9sb2cyOworCisJbXNpemUgPSBDRkdfRERSX1NJWkU7CisJZm9yIChkZHJfc2l6ZSA9IG1zaXplIDw8IDIwLCBkZHJfc2l6ZV9sb2cyID0gMDsKKwkgICAgIChkZHJfc2l6ZSA+IDEpOworCSAgICAgZGRyX3NpemUgPSBkZHJfc2l6ZT4+MSwgZGRyX3NpemVfbG9nMisrKSB7CisJCWlmIChkZHJfc2l6ZSAmIDEpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpbS0+c3lzY29uZi5kZHJsYXdbMF0uYXIgPSBMQVdBUl9FTiB8ICgoZGRyX3NpemVfbG9nMiAtIDEpICYgTEFXQVJfU0laRSk7CisjaWYgKENGR19ERFJfU0laRSAhPSAyNTYpCisjd2FybmluZyBDdXJyZW5seSBhbnkgZGRyIHNpemUgb3RoZXIgdGhhbiAyNTYgaXMgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKwlpbS0+ZGRyLmNzYm5kc1swXS5jc2JuZHMgPSAweDAwMTAwMDE3OworCWltLT5kZHIuY3NibmRzWzFdLmNzYm5kcyA9IDB4MDAxODAwMWY7CisJaW0tPmRkci5jc2JuZHNbMl0uY3NibmRzID0gMHgwMDAwMDAwNzsKKwlpbS0+ZGRyLmNzYm5kc1szXS5jc2JuZHMgPSAweDAwMDgwMDBmOworCWltLT5kZHIuY3NfY29uZmlnWzBdID0gQ0ZHX0REUl9DT05GSUc7CisJaW0tPmRkci5jc19jb25maWdbMV0gPSBDRkdfRERSX0NPTkZJRzsKKwlpbS0+ZGRyLmNzX2NvbmZpZ1syXSA9IENGR19ERFJfQ09ORklHOworCWltLT5kZHIuY3NfY29uZmlnWzNdID0gQ0ZHX0REUl9DT05GSUc7CisJaW0tPmRkci50aW1pbmdfY2ZnXzEgPQorCQkzIDw8IFRJTUlOR19DRkcxX1BSRVRPQUNUX1NISUZUIHwKKwkJNyA8PCBUSU1JTkdfQ0ZHMV9BQ1RUT1BSRV9TSElGVCB8CisJCTMgPDwgVElNSU5HX0NGRzFfQUNUVE9SV19TSElGVCAgfAorCQk0IDw8IFRJTUlOR19DRkcxX0NBU0xBVF9TSElGVCAgIHwKKwkJMyA8PCBUSU1JTkdfQ0ZHMV9SRUZSRUNfU0hJRlQgICB8CisJCTMgPDwgVElNSU5HX0NGRzFfV1JSRUNfU0hJRlQgICAgfAorCQkyIDw8IFRJTUlOR19DRkcxX0FDVFRPQUNUX1NISUZUIHwKKwkJMSA8PCBUSU1JTkdfQ0ZHMV9XUlRPUkRfU0hJRlQ7CisJaW0tPmRkci50aW1pbmdfY2ZnXzIgPSAyIDw8IFRJTUlOR19DRkcyX1dSX0RBVEFfREVMQVlfU0hJRlQ7CisJaW0tPmRkci5zZHJhbV9jZmcgPQorCQlTRFJBTV9DRkdfU1JFTgorI2lmIGRlZmluZWQoQ09ORklHX0REUl8yVF9USU1JTkcpCisJCXwgU0RSQU1fQ0ZHXzJUX0VOCisjZW5kaWYKKwkJfCAyIDw8IFNEUkFNX0NGR19TRFJBTV9UWVBFX1NISUZUOworCWltLT5kZHIuc2RyYW1fbW9kZSA9CisJCTB4MjAwMCA8PCBTRFJBTV9NT0RFX0VTRF9TSElGVCB8CisJCTB4MDE2MiA8PCBTRFJBTV9NT0RFX1NEX1NISUZUOworCisJaW0tPmRkci5zZHJhbV9pbnRlcnZhbCA9IDB4MDQ1QiA8PCBTRFJBTV9JTlRFUlZBTF9SRUZJTlRfU0hJRlQgfAorCQkweDAxMDAgPDwgU0RSQU1fSU5URVJWQUxfQlNUT1BSRV9TSElGVDsKKwl1ZGVsYXkoMjAwKTsKKworCWltLT5kZHIuc2RyYW1fY2ZnIHw9IFNEUkFNX0NGR19NRU1fRU47CisKKwlyZXR1cm4gbXNpemU7Cit9CisjZW5kaWYvKiFDRkdfU1BEX0VFUFJPTSovCisKKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJcHV0cygiQm9hcmQ6IEZyZWVzY2FsZSBNUEM4MzQ5QURTXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKy8qCisgKiBJbml0aWFsaXplIFBDSSBEZXZpY2VzLCByZXBvcnQgZGV2aWNlcyBmb3VuZAorICovCisjaWZuZGVmIENPTkZJR19QQ0lfUE5QCitzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX21wYzgzeHhhZHNfY29uZmlnX3RhYmxlW10gPSB7CisJe1BDSV9BTllfSUQsUENJX0FOWV9JRCxQQ0lfQU5ZX0lELFBDSV9BTllfSUQsCisJcGNpX2NmZ2Z1bmNfY29uZmlnX2RldmljZSwge1BDSV9FTkVUMF9JT0FERFIsCisJCQkJICAgIFBDSV9FTkVUMF9NRU1BRERSLAorCQkJCSAgICBQQ0lfQ09NTU9OX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUgorCX0gfSwKKwl7fQorfQorI2VuZGlmCisKKwordm9sYXRpbGUgc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlW10gPSB7CisJeworI2lmbmRlZiBDT05GSUdfUENJX1BOUAorCWNvbmZpZ190YWJsZTpwY2lfbXBjODN4eGFkc19jb25maWdfdGFibGUsCisjZW5kaWYKKwl9LAorCXsKKyNpZm5kZWYgQ09ORklHX1BDSV9QTlAKKwljb25maWdfdGFibGU6cGNpX21wYzgzeHhhZHNfY29uZmlnX3RhYmxlLAorI2VuZGlmCisJfQorfTsKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKwordm9pZAorcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJZXh0ZXJuIHZvaWQgcGNpX21wYzgzeHhfaW5pdCh2b2xhdGlsZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCisJcGNpX21wYzgzeHhfaW5pdChob3NlKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCit9CisKKy8qCisgKiBpZiBNUEM4MzQ5QURTIGlzIHNvbGRlcmVkIHdpdGggU0RSQU0KKyAqLworI2lmIGRlZmluZWQoQ0ZHX0JSMl9QUkVMSU0pICBcCisJJiYgZGVmaW5lZChDRkdfT1IyX1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQkFSMl9QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0FSMl9QUkVMSU0pCisvKgorICogSW5pdGlhbGl6ZSBTRFJBTSBtZW1vcnkgb24gdGhlIExvY2FsIEJ1cy4KKyAqLworCit2b2lkCitzZHJhbV9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SQkFSOworCXZvbGF0aWxlIGxidXM4MzQ5X3QgKmxiYz0gJmltbWFwLT5sYnVzOworCXVpbnQgKnNkcmFtX2FkZHIgPSAodWludCAqKUNGR19MQkNfU0RSQU1fQkFTRTsKKworCXB1dHMoIlxuICAgU0RSQU0gb24gTG9jYWwgQnVzOiAiKTsKKwlwcmludF9zaXplIChDRkdfTEJDX1NEUkFNX1NJWkUgKiAxMDI0ICogMTAyNCwgIlxuIik7CisKKwkvKgorCSAqIFNldHVwIFNEUkFNIEJhc2UgYW5kIE9wdGlvbiBSZWdpc3RlcnMsIGFscmVhZHkgZG9uZSBpbiBjcHVfaW5pdC5jCisJICovCisKKwkvKnNldHVwIG10cnB0LCBsc3J0IGFuZCBsYmNyIGZvciBMQiBidXMqLworCWxiYy0+bGJjciA9IENGR19MQkNfTEJDUjsKKwlsYmMtPm1ydHByID0gQ0ZHX0xCQ19NUlRQUjsKKwlsYmMtPmxzcnQgPSBDRkdfTEJDX0xTUlQ7CisJYXNtKCJzeW5jIik7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgU0RSQU0gY29udHJvbGxlciBNYWNoaW5lIE1vZGUgUmVnaXN0ZXIuCisJICovCisJbGJjLT5sc2RtciA9IENGR19MQkNfTFNETVJfNTsgLyogMHg0MDYzNjczMzsgbm9ybWFsIG9wZXJhdGlvbiovCisKKwlsYmMtPmxzZG1yID0gQ0ZHX0xCQ19MU0RNUl8xOyAvKjB4Njg2MzY3MzM7cHJlY2hhcmdlIGFsbCB0aGUgYmFua3MqLworCWFzbSgic3luYyIpOworCSpzZHJhbV9hZGRyID0gMHhmZjsKKwl1ZGVsYXkoMTAwKTsKKworCWxiYy0+bHNkbXIgPSBDRkdfTEJDX0xTRE1SXzI7LyoweDQ4NjM2NzMzO2F1dG8gcmVmcmVzaCovCisJYXNtKCJzeW5jIik7CisJLyoxIHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyoyIHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyozIHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyo0IHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyo1IHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyo2IHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyo3IHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisJLyo4IHRpbWVzKi8KKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisKKwkvKiAweDU4NjM2NzMzO21vZGUgcmVnaXN0ZXIgd3JpdGUgb3BlcmF0aW9uICovCisJbGJjLT5sc2RtciA9IENGR19MQkNfTFNETVJfNDsKKwlhc20oInN5bmMiKTsKKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJdWRlbGF5KDEwMCk7CisKKwlsYmMtPmxzZG1yID0gQ0ZHX0xCQ19MU0RNUl81OyAvKjB4NDA2MzY3MzM7bm9ybWFsIG9wZXJhdGlvbiovCisJYXNtKCJzeW5jIik7CisJKnNkcmFtX2FkZHIgPSAweGZmOworCXVkZWxheSgxMDApOworfQorI2Vsc2UKK3ZvaWQKK3NkcmFtX2luaXQodm9pZCkKK3sKKwlwdXQoIlNEUkFNIG9uIExvY2FsIEJ1cyBpcyBOT1QgYXZhaWxhYmxlIVxuIik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNDlhZHMvdS1ib290LmxkcyBiL2JvYXJkL21wYzgzNDlhZHMvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmMyZDZmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODM0OWFkcy91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgY3B1L21wYzgzeHgvc3RhcnQubwkoLnRleHQpCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICAgIC4gPSBBTElHTigxNik7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDBGRkYpICYgMHhGRkZGRjAwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oNDA5Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDQwOTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KK0VOVFJZKF9zdGFydCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBhZHMvbXBjODU0MGFkcy5jIGIvYm9hcmQvbXBjODU0MGFkcy9tcGM4NTQwYWRzLmMKaW5kZXggMDFiMDM4Ni4uZDBlYjY5MCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU0MGFkcy9tcGM4NTQwYWRzLmMKKysrIGIvYm9hcmQvbXBjODU0MGFkcy9tcGM4NTQwYWRzLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vaW1tYXBfODV4eC5oPgogI2luY2x1ZGUgPHNwZC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCiBleHRlcm4gdm9pZCBkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKTsKICNlbmRpZgogCkBAIC05Niw3ICs5Niw3IEBACiAJZHJhbV9zaXplID0gZml4ZWRfc2RyYW0gKCk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogCS8qCiAJICogSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIEREUiBFQ0MuCiAJICovCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTQwYWRzL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM4NTQwYWRzL3UtYm9vdC5sZHMKaW5kZXggNTZkZDQ1Ny4uODU4NTJkNSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU0MGFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL21wYzg1NDBhZHMvdS1ib290LmxkcwpAQCAtNzAsNyArNzAsNiBAQAogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1Lm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L3RzZWMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQogICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBldmFsL01ha2VmaWxlIGIvYm9hcmQvbXBjODU0MGV2YWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxOTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NDBldmFsL01ha2VmaWxlCkBAIC0wLDAgKzEsNDkgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAxCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCisjT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8gJChCT0FSRClfc2xhdmUubworU09CSlMJOj0gaW5pdC5vCisjU09CSlMJOj0KKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChPQkpTKSAkKFNPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKKy1pbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU0MGV2YWwvY29uZmlnLm1rIGIvYm9hcmQvbXBjODU0MGV2YWwvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjcxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4NTQwZXZhbC9jb25maWcubWsKQEAgLTAsMCArMSwzNCBAQAorIyBNb2RpZmllZCBieSBYaWFuZ2h1YSBYaWFvLCBYLlhpYW9AbW90b3JvbGEuY29tCisjIChDKSBDb3B5cmlnaHQgMjAwMixNb3Rvcm9sYSBJbmMuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgZ2RhODU0MCBib2FyZAorIyBkZWZhdWx0IENDQVJCQVIgaXMgYXQgMHhmZjcwMDAwMAorIyBhc3N1bWUgVS1Cb290IGlzIGxlc3MgdGhhbiAwLjVNQgorIworI1RFWFRfQkFTRSA9IDB4MTAwMDAwMAorVEVYVF9CQVNFID0gMHhmZmY4MDAwMAorCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01QQzg1eHg9MQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODU0MD0xCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19FNTAwPTEKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBldmFsL2ZsYXNoLmMgYi9ib2FyZC9tcGM4NTQwZXZhbC9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMDBhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4NTQwZXZhbC9mbGFzaC5jCkBAIC0wLDAgKzEsODkyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzIE1vdG9yb2xhIEluYy4KKyAqICBYaWFuZ2h1YSBYaWFvLChYLlhpYW9AbW90b3JvbGEuY29tKQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorICogIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAxLCBTdHVhcnQgSHVnaGVzLCBMaW5lbyBJbmMsIHN0dWFydGhAbGluZW8uY29tCisgKiBBZGQgc3VwcG9ydCB0aGUgU2hhcnAgY2hpcHMgb24gdGhlIG1wYzgyNjBhZHMuCisgKiBJIHN0YXJ0ZWQgd2l0aCBib2FyZC9pcDg2MC9mbGFzaC5jIGFuZCBtYWRlIGNoYW5nZXMgSSBmb3VuZCBpbgorICogdGhlIE1URCBwcm9qZWN0IGJ5IERhdmlkIFNjaGxlZWYuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWYgIWRlZmluZWQoQ0ZHX05PX0ZMQVNIKQorCitmbGFzaF9pbmZvX3QJZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyMgaWZuZGVmICBDRkdfRU5WX0FERFIKKyMgIGRlZmluZSBDRkdfRU5WX0FERFIJKENGR19GTEFTSF9CQVNFICsgQ0ZHX0VOVl9PRkZTRVQpCisjIGVuZGlmCisjIGlmbmRlZiAgQ0ZHX0VOVl9TSVpFCisjICBkZWZpbmUgQ0ZHX0VOVl9TSVpFCUNGR19FTlZfU0VDVF9TSVpFCisjIGVuZGlmCisjIGlmbmRlZiAgQ0ZHX0VOVl9TRUNUX1NJWkUKKyMgIGRlZmluZSBDRkdfRU5WX1NFQ1RfU0laRSAgQ0ZHX0VOVl9TSVpFCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFRoZSB2YXJpYWJsZSBzaG91bGQgYmUgaW4gdGhlIGZsYXNoIGluZm8gc3RydWN0dXJlLiBTaW5jZSBpdAorICogaXMgb25seSB1c2VkIGluIHRoaXMgYm9hcmQgc3BlY2lmaWMgZmlsZSBpdCBpcyBkZWNsYXJlZCBoZXJlLgorICogSW4gdGhlIGZ1dHVyZSBJIHRoaW5rIGFuIGVuZGlhbiBmbGFnIHNob3VsZCBiZSBwYXJ0IG9mIHRoZQorICogZmxhc2hfaW5mb190IHN0cnVjdHVyZS4gKFJvbiBBbGRlcikKKyAqLworc3RhdGljIHVsb25nIGJpZ19lbmRpYW4gPSAwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGdW5jdGlvbnMKKyAqLworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOworc3RhdGljIGludCB3cml0ZV9ibG9jayAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgZGVzdCwgdWxvbmcgY250KTsKK3N0YXRpYyBpbnQgd3JpdGVfc2hvcnQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdXNob3J0IGRhdGEpOworc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpOworc3RhdGljIGludCBjbGVhcl9ibG9ja19sb2NrX2JpdChmbGFzaF9pbmZvX3QgKmluZm8sIHZ1X2xvbmcgKiBhZGRyKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBpOworCisJLyogSW5pdDogZW5hYmxlIHdyaXRlLAorCSAqIG9yIHdlIGNhbm5vdCBldmVuIHdyaXRlIGZsYXNoIGNvbW1hbmRzCisJICovCisJZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CisJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCisJCS8qIHNldCB0aGUgZGVmYXVsdCBzZWN0b3Igb2Zmc2V0ICovCisJfQorCisJLyogU3RhdGljIEZMQVNIIEJhbmsgY29uZmlndXJhdGlvbiBoZXJlIC0gRklYTUUgWFhYICovCisKKwlzaXplID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKilDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOworCisJaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCQkJc2l6ZSwgc2l6ZTw8MjApOworCX0KKworCS8qIFJlLWRvIHNpemluZyB0byBnZXQgZnVsbCBjb3JyZWN0IGluZm8gKi8KKwlzaXplID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKilDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOworCisJZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZTsKKworI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCisjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRQorCS8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisJZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorCQkgICAgICBDRkdfTU9OSVRPUl9CQVNFLAorCQkgICAgICBDRkdfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCisJCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKKyNlbmRpZgorCisjaWZkZWYJQ0ZHX0VOVl9JU19JTl9GTEFTSAorCS8qIEVOViBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19FTlZfQUREUiwKKwkJICAgICAgQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0VDVF9TSVpFLTEsCisJCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKKyNlbmRpZgorI2VuZGlmCisJcmV0dXJuIChzaXplKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJaW50IGk7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9JTlRFTDoJcHJpbnRmICgiSW50ZWwgIik7CQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9TSEFSUDogICBwcmludGYgKCJTaGFycCAiKTsJCWJyZWFrOworCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJY2FzZSBGTEFTSF8yOEYwMTZTVjoJcHJpbnRmICgiMjhGMDE2U1YgKDE2IE1iaXQsIDMyIHggNjRrKVxuIik7CisJCQkJYnJlYWs7CisJY2FzZSBGTEFTSF8yOEYxNjBTMzoJcHJpbnRmICgiMjhGMTYwUzMgKDE2IE1iaXQsIDMyIHggNTEySylcbiIpOworCQkJCWJyZWFrOworCWNhc2UgRkxBU0hfMjhGMzIwUzM6CXByaW50ZiAoIjI4RjMyMFMzICgzMiBNYml0LCA2NCB4IDUxMkspXG4iKTsKKwkJCQlicmVhazsKKwljYXNlIEZMQVNIX0xIMjhGMDE2U0NUOiBwcmludGYgKCIyOEYwMTZTQyAoMTYgTWJpdCwgMzIgeCA2NEspXG4iKTsKKwkJCQlicmVhazsKKwljYXNlIEZMQVNIXzI4RjY0MEozQTogICBwcmludGYgKCIyOEY2NDBKM0EgKDY0IE1iaXQsIDY0IHggMTI4SylcbiIpOworCQkJCWJyZWFrOworCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCQkJYnJlYWs7CisJfQorCisJcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKKwkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKworCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKKwlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbaV0sCisJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKKwkJKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKK30KKworIC8qIG9ubHkgZGVhbCB3aXRoIDE2IGJpdCBhbmQgMzIgYml0IHBvcnQgd2lkdGgsIDE2Yml0IGNoaXAgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAodnVfbG9uZyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKQoreworCXNob3J0IGk7CisJdWxvbmcgdmFsdWUsdmEsdmIsdmMsdmQ7CisJdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOworCXVsb25nIHNlY3Rvcl9vZmZzZXQ7CisKKyNpZmRlZiBERUJVRworCXByaW50ZigiQ2hlY2sgZmxhc2ggYXQgMHglMDh4XG4iLCh1aW50KWFkZHIpOworI2VuZGlmCisJLyogV3JpdGUgIkludGVsbGlnZW50IElkZW50aWZpZXIiIGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJKmFkZHIgPSAweDkwOTA5MDkwOworCXVkZWxheSgyMCk7CisJYXNtKCJzeW5jIik7CisKKyNpZm5kZWYgQ0ZHX0ZMQVNIX0NGSQorCXByaW50ZigiTm90IGRlZmluZSBDRkdfRkxBU0hfQ0ZJXG4iKTsKKwlyZXR1cm4gKDApOworI2Vsc2UKKwl2YWx1ZSA9IGFkZHJbMF07CisJdmE9KHZhbHVlICYgMHhGRjAwMDAwMCk+PjI0OworCXZiPSh2YWx1ZSAmIDB4MDBGRjAwMDApPj4xNjsKKwl2Yz0odmFsdWUgJiAweDAwMDBGRjAwKT4+ODsKKwl2ZD0odmFsdWUgJiAweDAwMDAwMEZGKTsKKwlpZiAoKHZhPT0wKSAmJiAodmI9PTApKSB7CisJCXByaW50ZigiY2Fubm90IGlkZW50aWZ5IEZsYXNoXG4iKTsKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCQlpbmZvLT5zaXplID0gMDsKKwkJcmV0dXJuICgwKTsJCQkvKiBubyBvciB1bmtub3duIGZsYXNoCSovCisJfQorCWVsc2UgaWYgKCh2YT09MCkgJiYgKHZiIT0wKSkgeworCQliaWdfZW5kaWFuID0gMTsKKwkJaW5mby0+Y2hpcHdpZHRoID0gRkxBU0hfQ0ZJX0JZMTY7CisJCWlmKHZiID09IHZkKSBpbmZvLT5wb3J0d2lkdGggPSBGTEFTSF9DRklfMzJCSVQ7CisJCWVsc2UgaW5mby0+cG9ydHdpZHRoID0gRkxBU0hfQ0ZJXzE2QklUOworCX0KKwllbHNlIGlmICgodmEhPTApICYmICh2Yj09MCkpIHsKKwkJYmlnX2VuZGlhbiA9IDA7CisJCWluZm8tPmNoaXB3aWR0aCA9IEZMQVNIX0NGSV9CWTE2OworCQlpZih2YSA9PSB2YykgaW5mby0+cG9ydHdpZHRoID0gRkxBU0hfQ0ZJXzMyQklUOworCQllbHNlIGluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV8xNkJJVDsKKwl9CisJZWxzZSBpZiAoKHZhIT0wKSAmJiAodmIhPTApKSB7CisJCWJpZ19lbmRpYW4gPSAxOwkJLyogbm8gbWVhbmluZyBmb3IgOGJpdCBjaGlwICovCisJCWluZm8tPmNoaXB3aWR0aCA9IEZMQVNIX0NGSV9CWTg7CisJCWlmKHZhID09IHZiKSBpbmZvLT5wb3J0d2lkdGggPSBGTEFTSF9DRklfMTZCSVQ7CisJCWVsc2UgaW5mby0+cG9ydHdpZHRoID0gRkxBU0hfQ0ZJXzhCSVQ7CisJfQorI2lmZGVmIERFQlVHCisJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKKwkJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJCXByaW50ZigicG9ydCB3aWR0aCBpcyA4IGJpdC5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQkJcHJpbnRmKCJwb3J0IHdpZHRoIGlzIDE2IGJpdCwgIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6CisJCQlwcmludGYoInBvcnQgd2lkdGggaXMgMzIgYml0LCAiKTsKKwkJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGluZm8tPmNoaXB3aWR0aCkgeworCQljYXNlIEZMQVNIX0NGSV9CWTE2OgorCQkJcHJpbnRmKCJjaGlwIHdpZHRoIGlzIDE2IGJpdCwgIik7CisJCQlzd2l0Y2ggKGJpZ19lbmRpYW4pIHsKKwkJCQljYXNlIDA6CisJCQkJCXByaW50ZigiTGl0dGxlIEVuZGlhbi5cbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXByaW50ZigiQmlnIEVuZGlhbi5cbiIpOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCX0KKyNlbmRpZgorI2VuZGlmCQkvKiNpZmRlZiBDRkdfRkxBU0hfQ0ZJKi8KKworCWlmIChiaWdfZW5kaWFuPT0wKSB2YWx1ZSA9IChhZGRyWzBdICYgMHhGRjAwMDAwMCkgPj44OworCWVsc2UgdmFsdWUgPSAoYWRkclswXSAmIDB4MDBGRjAwMDApOworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJtYW51ZmFjdHVyZXI9MHgleFxuIiwodWludCkodmFsdWU+PjE2KSk7CisjZW5kaWYKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSBNVF9NQU5VRkFDVCAmIDB4RkZGRjAwMDA6CS8qIFNIQVJQLCBNVCBvciA9PiBJbnRlbCAqLworCWNhc2UgSU5URUxfQUxUX01BTlUgJiAweEZGRkYwMDAwOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9JTlRFTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJ1bmtub3duIG1hbnVmYWN0dXJlcjogJXhcbiIsICh1bnNpZ25lZCBpbnQpdmFsdWUpOworCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCWluZm8tPnNpemUgPSAwOworCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2gJKi8KKwl9CisKKwlpZiAoaW5mby0+cG9ydHdpZHRoPT1GTEFTSF9DRklfMTZCSVQpIHsKKwkJc3dpdGNoIChiaWdfZW5kaWFuKSB7CisJCQljYXNlIDA6CisJCQkJdmFsdWUgPSAoYWRkclswXSAmIDB4MDAwMEZGMDApPj44OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXZhbHVlID0gKGFkZHJbMF0gJiAweDAwMDAwMEZGKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmIChpbmZvLT5wb3J0d2lkdGggPT0gRkxBU0hfQ0ZJXzMyQklUKSB7CisJCXN3aXRjaCAoYmlnX2VuZGlhbikgeworCQkJY2FzZSAwOgorCQkJCXZhbHVlID0gKGFkZHJbMV0gJiAweDAwMDBGRjAwKT4+ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQl2YWx1ZSA9IChhZGRyWzFdICYgMHgwMDAwMDBGRik7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50ZigiZGV2aWNlSUQ9MHgleFxuIiwodWludCl2YWx1ZSk7CisjZW5kaWYKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSAoSU5URUxfSURfMjhGMDE2UyAmIDB4MDAwMEZGRkYpOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYwMTZTVjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7CisJCXNlY3Rvcl9vZmZzZXQgPSAweDEwMDAwOworCQlicmVhazsJCQkJLyogPT4gMiBNQgkJKi8KKworCWNhc2UgKElOVEVMX0lEXzI4RjE2MFMzICYgMHgwMDAwRkZGRik6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjE2MFMzOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzMjsKKwkJc2VjdG9yX29mZnNldCA9IDB4MTAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiAyIE1CCQkqLworCisJY2FzZSAoSU5URUxfSURfMjhGMzIwUzMgJiAweDAwMDBGRkZGKToKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMzIwUzM7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OworCQlzZWN0b3Jfb2Zmc2V0ID0gMHgxMDAwMDsKKwkJYnJlYWs7CQkJCS8qID0+IDQgTUIJCSovCisKKwljYXNlIChJTlRFTF9JRF8yOEY2NDBKM0EgJiAweDAwMDBGRkZGKToKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKKwkJc2VjdG9yX29mZnNldCA9IDB4MjAwMDA7CisJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPT4gOCBNQiAgICAgICAgICAgICAqLworCisJY2FzZSBTSEFSUF9JRF8yOEYwMTZTQ0wgJiAweDAwMDBGRkZGOgorCWNhc2UgU0hBUlBfSURfMjhGMDE2U0NaICYgMHgwMDAwRkZGRjoKKwkJaW5mby0+Zmxhc2hfaWQgICAgICA9IEZMQVNIX01BTl9TSEFSUCB8IEZMQVNIX0xIMjhGMDE2U0NUOworCQlpbmZvLT5zZWN0b3JfY291bnQgID0gMzI7CisJCXNlY3Rvcl9vZmZzZXQgPSAweDEwMDAwOworCQlicmVhazsJCQkJLyogPT4gMiBNQgkJKi8KKworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlyZXR1cm4gKDApOwkJCS8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKworCX0KKworCXNlY3Rvcl9vZmZzZXQgPSBzZWN0b3Jfb2Zmc2V0ICogKGluZm8tPnBvcnR3aWR0aCAvIGluZm8tPmNoaXB3aWR0aCk7CisJaW5mby0+c2l6ZSA9IGluZm8tPnNlY3Rvcl9jb3VudCAqIHNlY3Rvcl9vZmZzZXQ7CisKKwkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJaW5mby0+c3RhcnRbaV0gPSBiYXNlOworCQliYXNlICs9IHNlY3Rvcl9vZmZzZXQ7CisJCS8qIGRvbid0IGtub3cgaG93IHRvIGNoZWNrIHNlY3RvciBwcm90ZWN0aW9uICovCisJCWluZm8tPnByb3RlY3RbaV0gPSAwOworCX0KKworCS8qCisJICogUHJldmVudCB3cml0ZXMgdG8gdW5pbml0aWFsaXplZCBGTEFTSC4KKwkgKi8KKwlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgeworCQlhZGRyID0gKHZ1X2xvbmcgKilpbmZvLT5zdGFydFswXTsKKwkJKmFkZHIgPSAweEZGRkZGRjsJLyogcmVzZXQgYmFuayB0byByZWFkIGFycmF5IG1vZGUgKi8KKwkJYXNtKCJzeW5jIik7CisJfQorCisJcmV0dXJuIChpbmZvLT5zaXplKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworaW50CWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWludCBmbGFnLCBwcm90LCBzZWN0OworCXVsb25nIHN0YXJ0LCBub3csIGxhc3QsIHJlYWR5LCBlcmFzZV9lcnJfc3RhdHVzOworCisJaWYgKGJpZ19lbmRpYW4gPT0gMSkgeworCQlyZWFkeSA9IDB4MDA4MDsKKwkJZXJhc2VfZXJyX3N0YXR1cyA9IDB4MDBhMDsKKwl9CisJZWxzZSB7CisJCXJlYWR5ID0gMHg4MDAwOworCQllcmFzZV9lcnJfc3RhdHVzID0gMHhhMDAwOworCX0KKwlpZiAoKGluZm8tPnBvcnR3aWR0aCAvIGluZm8tPmNoaXB3aWR0aCk9PTIpIHsKKwkJcmVhZHkgKz0gKHJlYWR5IDw8MTYpOworCQllcmFzZV9lcnJfc3RhdHVzICs9IChlcmFzZV9lcnJfc3RhdHVzIDw8MTYpOworCX0KKworI2lmZGVmIERFQlVHCisJcHJpbnRmICgiXG5SZWFkeSBmbGFnIGlzIDB4JWx4XG5FcmFzZSBlcnJvciBmbGFnIGlzIDB4JWx4IiwgcmVhZHksIGVyYXNlX2Vycl9zdGF0dXMpOworI2VuZGlmCisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCWlmICggICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSAhPSBGTEFTSF9NQU5fSU5URUwpCisJICAgICAmJiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IEZMQVNIX01BTl9TSEFSUCkgKSB7CisJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCisJCQlpbmZvLT5mbGFzaF9pZCk7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCQkJcHJvdCsrOworCQl9CisJfQorCisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJcHJvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiXG4iKTsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50ZigiXG5GbGFzaCBFcmFzZTpcbiIpOworI2VuZGlmCisJLyogTWFrZSBTdXJlIEJsb2NrIExvY2sgQml0IGlzIG5vdCBzZXQuICovCisJaWYoY2xlYXJfYmxvY2tfbG9ja19iaXQoaW5mbywgKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc19maXJzdF0pKSl7CisJCXJldHVybiAxOworCX0KKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKyNpZiBkZWZpbmVkKERFQlVHKQorCXByaW50ZigiQmVnaW4gdG8gZXJhc2Ugbm93LHNfZmlyc3Q9MHgleCBzX2xhc3Q9MHgleC4uLlxuIixzX2ZpcnN0LHNfbGFzdCk7CisjZW5kaWYKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCXZ1X3Nob3J0ICphZGRyMTYgPSAodnVfc2hvcnQgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCQkJdnVfbG9uZyAqYWRkciAgID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCQkJcHJpbnRmKCIuIik7CisJCQlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgeworCQkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJbGFzdCA9IHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJCQkJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKwkJCQkJLyogUmVzZXQgQXJyYXkgKi8KKwkJCQkJKmFkZHIxNiA9IDB4ZmZmZjsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCS8qIENsZWFyIFN0YXR1cyBSZWdpc3RlciAqLworCQkJCQkqYWRkcjE2ID0gMHg1MDUwOworCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJLyogU2luZ2xlIEJsb2NrIEVyYXNlIENvbW1hbmQgKi8KKwkJCQkJKmFkZHIxNiA9IDB4MjAyMDsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCS8qIENvbmZpcm0gKi8KKwkJCQkJKmFkZHIxNiA9IDB4RDBEMDsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCWlmKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSAhPSBGTEFTSF9MSDI4RjAxNlNDVCkgeworCQkJCQkgICAgLyogUmVzdW1lIENvbW1hbmQsIGFzIHBlciBlcnJhdGEgdXBkYXRlICovCisJCQkJCSAgICAqYWRkcjE2ID0gMHhEMEQwOworCQkJCQkgICAgYXNtKCJzeW5jIik7CisJCQkJCX0KKwkJCQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJCQkJCWlmIChmbGFnKQorCQkJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJCQkJLyogd2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovCisJCQkJCSphZGRyMTYgPSAweDcwNzA7CisJCQkJCXVkZWxheSAoMTAwMCk7CisJCQkJCXdoaWxlICgoKmFkZHIxNiAmIHJlYWR5KSAhPSByZWFkeSkgeworCQkJCQkJaWYoKCphZGRyMTYgJiBlcmFzZV9lcnJfc3RhdHVzKT09IGVyYXNlX2Vycl9zdGF0dXMpeworCQkJCQkJCXByaW50ZigiRXJyb3IgaW4gQmxvY2sgRXJhc2UgLSBMb2NrIEJpdCBtYXkgYmUgc2V0IVxuIik7CisJCQkJCQkJcHJpbnRmKCJTdGF0dXMgUmVnaXN0ZXIgPSAweCVYXG4iLCAodWludCkqYWRkcjE2KTsKKwkJCQkJCQkqYWRkcjE2ID0gMHhGRkZGOwkvKiByZXNldCBiYW5rICovCisJCQkJCQkJYXNtKCJzeW5jIik7CisJCQkJCQkJcmV0dXJuIDE7CisJCQkJCQl9CisJCQkJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQkJCQkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCQkJCQkJKmFkZHIxNiA9IDB4RkZGRjsJLyogcmVzZXQgYmFuayAqLworCQkJCQkJCWFzbSgic3luYyIpOworCQkJCQkJCXJldHVybiAxOworCQkJCQkJfQorCQkJCQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwkJCQkJCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJCQkJCXB1dGMgKCcuJyk7CisJCQkJCQkJbGFzdCA9IG5vdzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQkJKmFkZHIxNiA9IDB4RkZGRjsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJbGFzdCA9IHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJCQkJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKwkJCQkJLyogUmVzZXQgQXJyYXkgKi8KKwkJCQkJKmFkZHIgPSAweGZmZmZmZmZmOworCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJLyogQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyICovCisJCQkJCSphZGRyID0gMHg1MDUwNTA1MDsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCS8qIFNpbmdsZSBCbG9jayBFcmFzZSBDb21tYW5kICovCisJCQkJCSphZGRyID0gMHgyMDIwMjAyMDsKKwkJCQkJYXNtKCJzeW5jIik7CisJCQkJCS8qIENvbmZpcm0gKi8KKwkJCQkJKmFkZHIgPSAweEQwRDBEMEQwOworCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJaWYoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spICE9IEZMQVNIX0xIMjhGMDE2U0NUKSB7CisJCQkJCSAgICAvKiBSZXN1bWUgQ29tbWFuZCwgYXMgcGVyIGVycmF0YSB1cGRhdGUgKi8KKwkJCQkJICAgICphZGRyID0gMHhEMEQwRDBEMDsKKwkJCQkJICAgIGFzbSgic3luYyIpOworCQkJCQl9CisJCQkJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCQkJCQlpZiAoZmxhZykKKwkJCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQkJCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLworCQkJCQkqYWRkciA9IDB4NzA3MDcwNzA7CisJCQkJCXVkZWxheSAoMTAwMCk7CisJCQkJCXdoaWxlICgoKmFkZHIgJiByZWFkeSkgIT0gcmVhZHkpIHsKKwkJCQkJCWlmKCgqYWRkciAmIGVyYXNlX2Vycl9zdGF0dXMpPT1lcmFzZV9lcnJfc3RhdHVzKXsKKwkJCQkJCQlwcmludGYoIkVycm9yIGluIEJsb2NrIEVyYXNlIC0gTG9jayBCaXQgbWF5IGJlIHNldCFcbiIpOworCQkJCQkJCXByaW50ZigiU3RhdHVzIFJlZ2lzdGVyID0gMHglWFxuIiwgKHVpbnQpKmFkZHIpOworCQkJCQkJCSphZGRyID0gMHhGRkZGRkZGRjsJLyogcmVzZXQgYmFuayAqLworCQkJCQkJCWFzbSgic3luYyIpOworCQkJCQkJCXJldHVybiAxOworCQkJCQkJfQorCQkJCQkJaWYgKChub3c9Z2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCQkJCQkJCSphZGRyID0gMHhGRkZGRkZGRjsJLyogcmVzZXQgYmFuayAqLworCQkJCQkJCWFzbSgic3luYyIpOworCQkJCQkJCXJldHVybiAxOworCQkJCQkJfQorCQkJCQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwkJCQkJCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJCQkJCXB1dGMgKCcuJyk7CisJCQkJCQkJbGFzdCA9IG5vdzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQkJKmFkZHIgPSAweEZGRkZGRkZGOworCQkJCQlhc20oInN5bmMiKTsKKwkJCQkJYnJlYWs7CisJCQl9CS8qIGVuZCBzd2l0Y2ggKi8KKwkJfQkJLyogZW5kIGlmICovCisJfQkJCS8qIGVuZCBmb3IgKi8KKworCXByaW50ZiAoImZsYXNoIGVyYXNlIGRvbmVcbiIpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KKworI2RlZmluZSBGTEFTSF9CTE9DS19TSVpFIDMyCisKK2ludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3AsIGRhdGEsIGNvdW50LCB0ZW1wOworLyoJdWxvbmcgdGVtcFtGTEFTSF9CTE9DS19TSVpFLzRdOyovCisJaW50IGksIGwsIHJjOworCisJY291bnQgPSBjbnQ7CisJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCQl9CisJCWZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQkJLS1jbnQ7CisJCQkrK2NwOworCQl9CisJCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCArPSA0OworCX0KKworCWNwID0gd3A7CisJLyogaGFuZGxlIHVuYWxpZ25lZCBibG9jayBieXRlcyAsIGZsYXNoIGJsb2NrIHNpemUgPSAxNmJ5dGVzICovCisJd3AgPSAoY3ArRkxBU0hfQkxPQ0tfU0laRS0xKSAmIH4oRkxBU0hfQkxPQ0tfU0laRS0xKTsKKwlpZiAoKHdwLWNwKT49Y250KSB7CisJCWlmICgocmMgPSB3cml0ZV9ibG9jayhpbmZvLHNyYyxjcCx3cC1jcCkpICE9MCkKKwkJCXJldHVybiAocmMpOworCQlzcmMgKz0gd3AtY3A7CisJCWNudCAtPSB3cC1jcDsKKwl9CisJLyogaGFuZGxlIGFsaWduZWQgYmxvY2sgYnl0ZXMgKi8KKwl0ZW1wID0gMDsKKwlwcmludGYoIlxuIik7CisJd2hpbGUgKCBjbnQgPj0gRkxBU0hfQkxPQ0tfU0laRSkgeworCQlpZiAoKHJjID0gd3JpdGVfYmxvY2soaW5mbyxzcmMsY3AsRkxBU0hfQkxPQ0tfU0laRSkpICE9MCkgeworCQkJcmV0dXJuIChyYyk7CisJCX0KKwkJc3JjICs9IEZMQVNIX0JMT0NLX1NJWkU7CisJCWNwICs9IEZMQVNIX0JMT0NLX1NJWkU7CisJCWNudCAtPSBGTEFTSF9CTE9DS19TSVpFOworCQlpZiAoKChjb3VudC1jbnQpPj4xMCk+dGVtcCkgeworCQkJdGVtcD0oY291bnQtY250KT4+MTA7CisJCQlwcmludGYoIlxyJWQgS0IiLHRlbXApOworCQl9CisJfQorCXByaW50ZigiXG4iKTsKKwl3cCA9IGNwOworCS8qCisJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CisJICovCisJd2hpbGUgKGNudCA+PSA0KSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGk9MDsgaTw0OyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJfQorCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICArPSA0OworCQljbnQgLT0gNDsKKwl9CisKKwlpZiAoY250ID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcworCSAqLworCWRhdGEgPSAwOworCWZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQktLWNudDsKKwl9CisJZm9yICg7IGk8NDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCX0KKworCXJldHVybiAod3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpOworfQorI3VuZGVmIEZMQVNIX0JMT0NLX1NJWkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV3JpdGUgYmxvY2sgdG8gRmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICogLTEgIEVycm9yCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfYmxvY2soZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgZGVzdCwgdWxvbmcgY250KQoreworCXZ1X3Nob3J0ICpiYWRkciwgKmFkZHIgPSAodnVfc2hvcnQgKilkZXN0OworCXVzaG9ydCBkYXRhOworCXVsb25nIHN0YXJ0LCBub3csIHhzcixjc3IsIHJlYWR5OworCWludCBmbGFnOworCisJaWYgKGNudD09MCkgcmV0dXJuIDA7CisJZWxzZSBpZihjbnQgIT0gKGNudCYgfjEpKSByZXR1cm4gLTE7CisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlkYXRhID0gKiBzcmM7CisJZGF0YSA9IChkYXRhPDw4KSB8ICooc3JjKzEpOworCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSB7CisJCXJldHVybiAoMik7CisJfQorCWlmIChiaWdfZW5kaWFuID09IDEpIHsKKwkJcmVhZHkgPSAweDAwODA7CisJfQorCWVsc2UgeworCQlyZWFkeSA9IDB4ODAwMDsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJCWRvIHsKKwkJCS8qIFdyaXRlIENvbW1hbmQgKi8KKwkJCSphZGRyID0gMHhlOGU4OworCQkJYXNtKCJzeW5jIik7CisJCQl4c3IgPSAqYWRkcjsKKwkJCWFzbSgic3luYyIpOworCQl9IHdoaWxlICghKHhzciAmIHJlYWR5KSk7CS8qd2FpdCB1bnRpbCByZWFkICovCisJCS8qd3JpdGUgY291bnQ9QkxPQ0sgU0laRSAtMSAqLworCQlkYXRhPShjbnQ+PjEpLTE7CisJCWRhdGE9KGRhdGE8PDgpfGRhdGE7CisJCSphZGRyID0gZGF0YTsJCS8qIHdvcmQgbW9kZSwgY250LzIgKi8KKwkJYXNtKCJzeW5jIik7CisJCWJhZGRyID0gYWRkcjsKKwkJd2hpbGUoY250KSB7CisJCQlkYXRhID0gKiBzcmMrKzsKKwkJCWRhdGEgPSAoZGF0YTw8OCkgfCAqc3JjKys7CisJCQlhc20oInN5bmMiKTsKKwkJCSpiYWRkciA9IGRhdGE7CisJCQlhc20oInN5bmMiKTsKKwkJCSsrYmFkZHI7CisJCQljbnQgPSBjbnQgLTI7CisJCX0KKwkJKmFkZHIgPSAweGQwZDA7CQkJLyogY29uZmlybSB3cml0ZSAqLworCQlzdGFydCA9IGdldF90aW1lcigwKTsKKwkJYXNtKCJzeW5jIik7CisJCWlmIChmbGFnKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworCQlmbGFnICA9IDA7CisJCXdoaWxlICgoKGNzciA9ICphZGRyKSAmIHJlYWR5KSAhPSByZWFkeSkgeworCQkJaWYgKChub3c9Z2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJCWZsYWcgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChjc3IgJiAweDQwNDApIHsKKwkJCXByaW50ZiAoIkNTUiBpbmRpY2F0ZXMgd3JpdGUgZXJyb3IgKCUwNHgpIGF0ICUwOGx4XG4iLCBjc3IsICh1bG9uZylhZGRyKTsKKwkJCWZsYWcgPSAxOworCQl9CisJCS8qIENsZWFyIFN0YXR1cyBSZWdpc3RlcnMgQ29tbWFuZCAqLworCQkqYWRkciA9IDB4NTA1MDsKKwkJYXNtKCJzeW5jIik7CisJCS8qIFJlc2V0IHRvIHJlYWQgYXJyYXkgbW9kZSAqLworCQkqYWRkciA9IDB4RkZGRjsKKwkJYXNtKCJzeW5jIik7CisJcmV0dXJuIChmbGFnKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHNob3J0IHdvcmQgdG8gRmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitzdGF0aWMgaW50IHdyaXRlX3Nob3J0IChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVzaG9ydCBkYXRhKQoreworCXZ1X3Nob3J0ICphZGRyID0gKHZ1X3Nob3J0ICopZGVzdDsKKwl1bG9uZyBzdGFydCwgbm93LCBjc3IsIHJlYWR5OworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcmV0dXJuICgyKTsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJCS8qIFdyaXRlIENvbW1hbmQgKi8KKwkJKmFkZHIgPSAweDEwMTA7CisJCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJYXNtKCJzeW5jIik7CisJCS8qIFdyaXRlIERhdGEgKi8KKwkJKmFkZHIgPSBkYXRhOworCQlhc20oInN5bmMiKTsKKwkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChmbGFnKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJaWYgKGJpZ19lbmRpYW4gPT0gMSkgeworCQkJcmVhZHkgPSAweDAwODA7CisJCX0KKwkJZWxzZSB7CisJCQlyZWFkeSA9IDB4ODAwMDsKKwkJfQorCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJCWZsYWcgID0gMDsKKwkJd2hpbGUgKCgoY3NyID0gKmFkZHIpICYgcmVhZHkpICE9IHJlYWR5KSB7CisJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQkJZmxhZyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGNzciAmIDB4NDA0MCkgeworCQkJcHJpbnRmICgiQ1NSIGluZGljYXRlcyB3cml0ZSBlcnJvciAoJTA0eCkgYXQgJTA4bHhcbiIsIGNzciwgKHVsb25nKWFkZHIpOworCQkJZmxhZyA9IDE7CisJCX0KKwkJLyogQ2xlYXIgU3RhdHVzIFJlZ2lzdGVycyBDb21tYW5kICovCisJCSphZGRyID0gMHg1MDUwOworCQlhc20oInN5bmMiKTsKKwkJLyogUmVzZXQgdG8gcmVhZCBhcnJheSBtb2RlICovCisJCSphZGRyID0gMHhGRkZGOworCQlhc20oInN5bmMiKTsKKwlyZXR1cm4gKGZsYWcpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitzdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKK3sKKwl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKilkZXN0OworCXVsb25nIHN0YXJ0LCBjc3IsIHJlYWR5OworCWludCBmbGFnPTA7CisKKwlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgeworCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwkJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJCXJldHVybiAoMik7CisJCX0KKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCQlpZiAoYmlnX2VuZGlhbiA9PSAxKSB7CisJCQlyZWFkeSA9IDB4MDA4MDsKKwkJfQorCQllbHNlIHsKKwkJCXJlYWR5ID0gMHg4MDAwOworCQl9CisJCWlmICgoaW5mby0+cG9ydHdpZHRoIC8gaW5mby0+Y2hpcHdpZHRoKT09MikgeworCQkJcmVhZHkgKz0gKHJlYWR5IDw8MTYpOworCQl9CisJCWVsc2UgeworCQkJcmVhZHkgPSByZWFkeSA8PCAxNjsKKwkJfQorCQkvKiBXcml0ZSBDb21tYW5kICovCisJCSphZGRyID0gMHgxMDEwMTAxMDsKKwkJYXNtKCJzeW5jIik7CisJCS8qIFdyaXRlIERhdGEgKi8KKwkJKmFkZHIgPSBkYXRhOworCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKGZsYWcpCisJCQllbmFibGVfaW50ZXJydXB0cygpOworCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJZmxhZyAgPSAwOworCQl3aGlsZSAoKChjc3IgPSAqYWRkcikgJiByZWFkeSkgIT0gcmVhZHkpIHsKKwkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJCQlmbGFnID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY3NyICYgMHg0MDQwNDA0MCkgeworCQkJcHJpbnRmICgiQ1NSIGluZGljYXRlcyB3cml0ZSBlcnJvciAoJTA4bHgpIGF0ICUwOGx4XG4iLCBjc3IsICh1bG9uZylhZGRyKTsKKwkJCWZsYWcgPSAxOworCQl9CisJCS8qIENsZWFyIFN0YXR1cyBSZWdpc3RlcnMgQ29tbWFuZCAqLworCQkqYWRkciA9IDB4NTA1MDUwNTA7CisJCWFzbSgic3luYyIpOworCQkvKiBSZXNldCB0byByZWFkIGFycmF5IG1vZGUgKi8KKwkJKmFkZHIgPSAweEZGRkZGRkZGOworCQlhc20oInN5bmMiKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCWZsYWcgPSB3cml0ZV9zaG9ydCAoaW5mbywgZGVzdCwgICh1bnNpZ25lZCBzaG9ydCkgKGRhdGE+PjE2KSk7CisJCWlmIChmbGFnID09IDApCisJCQlmbGFnID0gd3JpdGVfc2hvcnQgKGluZm8sIGRlc3QrMiwgICh1bnNpZ25lZCBzaG9ydCkgKGRhdGEpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZmxhZyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIEJsb2NrIExvY2sgQml0LCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gVGltZW91dAorICovCisKK3N0YXRpYyBpbnQgY2xlYXJfYmxvY2tfbG9ja19iaXQoZmxhc2hfaW5mb190ICogaW5mbywgdnVfbG9uZyAgKiBhZGRyKQoreworCXVsb25nIHN0YXJ0LCBub3csIHJlYWR5OworCisJLyogUmVzZXQgQXJyYXkgKi8KKwkqYWRkciA9IDB4ZmZmZmZmZmY7CisJYXNtKCJzeW5jIik7CisJLyogQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyICovCisJKmFkZHIgPSAweDUwNTA1MDUwOworCWFzbSgic3luYyIpOworCisJKmFkZHIgPSAweDYwNjA2MDYwOworCWFzbSgic3luYyIpOworCSphZGRyID0gMHhkMGQwZDBkMDsKKwlhc20oInN5bmMiKTsKKworCisJaWYgKGJpZ19lbmRpYW4gPT0gMSkgeworCQlyZWFkeSA9IDB4MDA4MDsKKwl9CisJZWxzZSB7CisJCXJlYWR5ID0gMHg4MDAwOworCX0KKwlpZiAoKGluZm8tPnBvcnR3aWR0aCAvIGluZm8tPmNoaXB3aWR0aCk9PTIpIHsKKwkJcmVhZHkgKz0gKHJlYWR5IDw8MTYpOworCX0KKwllbHNlIHsKKwkJcmVhZHkgPSByZWFkeSA8PCAxNjsKKwl9CisjaWZkZWYgREVCVUcKKwlwcmludGYgKCIlczogUmVhZHkgZmxhZyBpcyAweCU4bHhcbiIsIF9fRlVOQ1RJT05fXywgcmVhZHkpOworI2VuZGlmCisJKmFkZHIgPSAweDcwNzA3MDcwOwkvKiByZWFkIHN0YXR1cyAqLworCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwl3aGlsZSgoKmFkZHIgJiByZWFkeSkgIT0gcmVhZHkpeworCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQlwcmludGYgKCJUaW1lb3V0IG9uIGNsZWFyaW5nIEJsb2NrIExvY2sgQml0XG4iKTsKKwkJCSphZGRyID0gMHhGRkZGRkZGRjsJLyogcmVzZXQgYmFuayAqLworCQkJYXNtKCJzeW5jIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDRkdfTk9fRkxBU0ggKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBldmFsL2luaXQuUyBiL2JvYXJkL21wYzg1NDBldmFsL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJjYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODU0MGV2YWwvaW5pdC5TCkBAIC0wLDAgKzEsMTc4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMywgTW90b3JvbGEgSW5jLgorKiBYaWFuZ2h1YSBYaWFvIDxYLlhpYW9AbW90b3JvbGEuY29tPgorKgorKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworKiBwcm9qZWN0LgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorKiBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxtcGM4NXh4Lmg+CisKKyNkZWZpbmUJZW50cnlfc3RhcnQgXAorCW1mbHIJcjEgCTsJXAorCWJsCTBmIAk7CisKKyNkZWZpbmUJZW50cnlfZW5kIFwKKzA6CW1mbHIJcjAJOwlcCisJbXRscglyMQk7CVwKKwlibHIJCTsKKworLyogVExCMSBlbnRyaWVzIGNvbmZpZ3VyYXRpb246ICovCisKKwkuc2VjdGlvbgkuYm9vdHBnLCAiYXgiCisJLmdsb2JsCXRsYjFfZW50cnkKK3RsYjFfZW50cnk6CisJZW50cnlfc3RhcnQKKworCS5sb25nIDB4MGEJLyogdGhlIGZvbGxvd2luZyBkYXRhIHRhYmxlIHVzZXMgYSBmZXcgb2YgMTYgVExCIGVudHJpZXMgKi8KKworCS5sb25nIFRMQjFfTUFTMCgxLDEsMCkKKwkubG9uZyBUTEIxX01BUzEoMSwxLDAsMCxCT09LRV9QQUdFU1pfMU0pCisJLmxvbmcgVExCMV9NQVMyKCgoQ0ZHX0NDU1JCQVI+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoKChDRkdfQ0NTUkJBUj4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworICAjaWYgZGVmaW5lZChDRkdfRkxBU0hfUE9SVF9XSURUSF8xNikKKwkubG9uZyBUTEIxX01BUzAoMSwyLDApCisJLmxvbmcgVExCMV9NQVMxKDEsMSwwLDAsQk9PS0VfUEFHRVNaXzRNKQorCS5sb25nIFRMQjFfTUFTMigoKENGR19GTEFTSF9CQVNFPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKCgoQ0ZHX0ZMQVNIX0JBU0U+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMSwzLDApCisJLmxvbmcgVExCMV9NQVMxKDEsMSwwLDAsQk9PS0VfUEFHRVNaXzRNKQorCS5sb25nIFRMQjFfTUFTMigoKChDRkdfRkxBU0hfQkFTRSsweDQwMDAwMCk+PjEyKSYweGZmZmZmKSwwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKCgoKENGR19GTEFTSF9CQVNFKzB4NDAwMDAwKT4+MTIpJjB4ZmZmZmYpLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisgICNlbHNlCisJLmxvbmcgVExCMV9NQVMwKDEsMiwwKQorCS5sb25nIFRMQjFfTUFTMSgxLDEsMCwwLEJPT0tFX1BBR0VTWl8xNk0pCisJLmxvbmcgVExCMV9NQVMyKCgoQ0ZHX0ZMQVNIX0JBU0U+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoKChDRkdfRkxBU0hfQkFTRT4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgxLDMsMCkKKwkubG9uZyBUTEIxX01BUzEoMCwwLDAsMCxCT09LRV9QQUdFU1pfMU0pCisJLmxvbmcgVExCMV9NQVMyKDAsMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMygwLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisgICNlbmRpZgorCisgICNpZiAhZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkKKwkubG9uZyBUTEIxX01BUzAoMSw0LDApCisJLmxvbmcgVExCMV9NQVMxKDEsMSwwLDAsQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoKChDRkdfRERSX1NEUkFNX0JBU0U+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoKChDRkdfRERSX1NEUkFNX0JBU0U+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMSw1LDApCisJLmxvbmcgVExCMV9NQVMxKDEsMSwwLDAsQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoKCgoQ0ZHX0REUl9TRFJBTV9CQVNFKzB4NDAwMDAwMCk+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoKCgoQ0ZHX0REUl9TRFJBTV9CQVNFKzB4NDAwMDAwMCk+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisgICNlbHNlCisJLmxvbmcgVExCMV9NQVMwKDEsNCwwKQorCS5sb25nIFRMQjFfTUFTMSgwLDAsMCwwLEJPT0tFX1BBR0VTWl8xTSkKKwkubG9uZyBUTEIxX01BUzIoMCwwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKDAsMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgxLDUsMCkKKwkubG9uZyBUTEIxX01BUzEoMCwwLDAsMCxCT09LRV9QQUdFU1pfMU0pCisJLmxvbmcgVExCMV9NQVMyKDAsMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMygwLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisgICNlbmRpZgorCisJLmxvbmcgVExCMV9NQVMwKDEsNiwwKQorCS5sb25nIFRMQjFfTUFTMSgxLDEsMCwwLEJPT0tFX1BBR0VTWl82NE0pCisgICNpZiBkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCisJLmxvbmcgVExCMV9NQVMyKCgoQ0ZHX0xCQ19TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDEsMCwxLDApCisgICNlbHNlCisJLmxvbmcgVExCMV9NQVMyKCgoQ0ZHX0xCQ19TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDAsMCwwLDApCisgICNlbmRpZgorCS5sb25nIFRMQjFfTUFTMygoKENGR19MQkNfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgxLDcsMCkKKwkubG9uZyBUTEIxX01BUzEoMSwxLDAsMCxCT09LRV9QQUdFU1pfMTZLKQorICAjaWZkZWYgQ09ORklHX0wyX0lOSVRfUkFNCisJLmxvbmcgVExCMV9NQVMyKCgoQ0ZHX0lOSVRfUkFNX0FERFI+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDEsMCwwLDAsMCkKKyAgI2Vsc2UKKwkubG9uZyBUTEIxX01BUzIoKChDRkdfSU5JVF9SQU1fQUREUj4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDAsMCwwKQorICAjZW5kaWYKKwkubG9uZyBUTEIxX01BUzMoKChDRkdfSU5JVF9SQU1fQUREUj4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgxLDgsMCkKKwkubG9uZyBUTEIxX01BUzEoMSwxLDAsMCxCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoKChDRkdfUENJX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKCgoQ0ZHX1BDSV9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZiksMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgxLDksMCkKKwkubG9uZyBUTEIxX01BUzEoMSwxLDAsMCxCT09LRV9QQUdFU1pfMTZLKQorCS5sb25nIFRMQjFfTUFTMigoKENGR19CQ1NSPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKCgoQ0ZHX0JDU1I+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKyAgI2lmIChDRkdfQ0NTUkJBUl9ERUZBVUxUICE9IENGR19DQ1NSQkFSKQorCS5sb25nIFRMQjFfTUFTMCgxLDE1LDApCisJLmxvbmcgVExCMV9NQVMxKDEsMSwwLDAsQk9PS0VfUEFHRVNaXzFNKQorCS5sb25nIFRMQjFfTUFTMigoKENGR19DQ1NSQkFSX0RFRkFVTFQ+PjEyKSAmIDB4ZmZmZmYpLDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoKChDRkdfQ0NTUkJBUl9ERUZBVUxUPj4xMikgJiAweGZmZmZmKSwwLDAsMCwwLDAsMSwwLDEsMCwxKQorICAjZWxzZQorCS5sb25nIFRMQjFfTUFTMCgxLDE1LDApCisJLmxvbmcgVExCMV9NQVMxKDAsMCwwLDAsQk9PS0VfUEFHRVNaXzFNKQorCS5sb25nIFRMQjFfTUFTMigwLDAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoMCwwLDAsMCwwLDAsMSwwLDEsMCwxKQorICAjZW5kaWYKKwllbnRyeV9lbmQKKworLyogTEFXKExvY2FsIEFjY2VzcyBXaW5kb3cpIGNvbmZpZ3VyYXRpb246CisgKiAwMDAwXzAwMDAtMDgwMF8wMDAwOiBERFIoMTI4TSkgLW9yLSBsYXJnZXIKKyAqIGYwMDBfMDAwMC1mM2ZmX2ZmZmY6IFBDSSgyNTZNKQorICogZjQwMF8wMDAwLWY3ZmZfZmZmZjogUmFwaWRJTygxMjhNKQorICogZjgwMF8wMDAwLWZmZmZfZmZmZjogbG9jYWxidXMoMTI4TSkKKyAqICAgZjgwMF8wMDAwLWZiZmZfZmZmZjogTEJDIFNEUkFNKDY0TSkKKyAqICAgZmMwMF8wMDAwLWZkZWZfZmZmZjogTEJDIEJDU1IsUlRDLGV0YygzMU0pCisgKiAgIGZkZjBfMDAwMC1mZGZmX2ZmZmY6IENDU1JCQVIoMU0pCisgKiAgIGZlMDBfMDAwMC1mZmZmX2ZmZmY6IEZsYXNoKDMyTSkKKyAqIE5vdGU6IENDU1JCQVIgYW5kIEwyLWFzLVNSQU0gZG9uJ3QgbmVlZCBjb25maWd1cmUgTG9jYWwgQWNjZXNzCisgKiAgICAgICBXaW5kb3cuCisgKiBOb3RlOiBJZiBmbGFzaCBpcyA4TSBhdCBkZWZhdWx0IHBvc2l0aW9uKGxhc3QgOE0pLG5vIExBVyBuZWVkZWQuCisgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorI2RlZmluZSBMQVdCQVIwICgoQ0ZHX0REUl9TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjAgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfRERSIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKQorI2Vsc2UKKyNkZWZpbmUgTEFXQkFSMCAwCisjZGVmaW5lIExBV0FSMCAgKChMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xMjhNKSkgJiB+TEFXQVJfRU4pCisjZW5kaWYKKworI2RlZmluZSBMQVdCQVIxICgoQ0ZHX1BDSV9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIxIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSVggfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkpCisKKyNpZiAhZGVmaW5lZChDT05GSUdfUkFNX0FTX0ZMQVNIKQorI2RlZmluZSBMQVdCQVIyICgoQ0ZHX0xCQ19TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjIgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKQorI2Vsc2UKKyNkZWZpbmUgTEFXQkFSMiAwCisjZGVmaW5lIExBV0FSMiAoKExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKSAmIH5MQVdBUl9FTikKKyNlbmRpZgorCisJLnNlY3Rpb24gLmJvb3RwZywgImF4IgorCS5nbG9ibAlsYXdfZW50cnkKK2xhd19lbnRyeToKKwllbnRyeV9zdGFydAorCS5sb25nIDB4MDMKKwkubG9uZyBMQVdCQVIwLExBV0FSMCxMQVdCQVIxLExBV0FSMSxMQVdCQVIyLExBV0FSMgorCWVudHJ5X2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU0MGV2YWwvbXBjODU0MGV2YWwuYyBiL2JvYXJkL21wYzg1NDBldmFsL21wYzg1NDBldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzYzhlZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NDBldmFsL21wYzg1NDBldmFsLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwMywgTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbywgKFguWGlhb0Btb3Rvcm9sYS5jb20pCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyIFNjb3R0IE1jTnV0dCA8c21jbnV0dEBhcnRlc3luY3AuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KKyNpbmNsdWRlIDxzcGQuaD4KKworZXh0ZXJuIGxvbmcgaW50IHNwZF9zZHJhbSAodm9pZCk7CisKK2xvbmcgaW50IGZpeGVkX3NkcmFtICh2b2lkKTsKKworaW50IGJvYXJkX3ByZV9pbml0ICh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpID0gJmltbXItPmltX3BjaXg7CisKKwlwY2ktPnBlZXIgJj0gMHhmZmZmZmZkZjsgLyogZGlzYWJsZSBtYXN0ZXIgYWJvcnQgKi8KKyNlbmRpZgorCXJldHVybiAwOworfQorCitpbnQgY2hlY2tib2FyZCAodm9pZCkKK3sKKwlzeXNfaW5mb190IHN5c2luZm87CisKKwlnZXRfc3lzX2luZm8gKCZzeXNpbmZvKTsKKworCXByaW50ZiAoIkJvYXJkOiBGcmVlc2NhbGUgTVBDODU0MEVWQUwgQm9hcmRcbiIpOworCXByaW50ZiAoIlx0Q1BVOiAlbHUgTUh6XG4iLCBzeXNpbmZvLmZyZXFQcm9jZXNzb3IgLyAxMDAwMDAwKTsKKwlwcmludGYgKCJcdENDQjogJWx1IE1IelxuIiwgc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMTAwMDAwMCk7CisJcHJpbnRmICgiXHRERFI6ICVsdSBNSHpcbiIsIHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDIwMDAwMDApOworCWlmKChDRkdfTEJDX0xDUlIgJiAweDBmKSA9PSAyIHx8IChDRkdfTEJDX0xDUlIgJiAweDBmKSA9PSA0IFwKKwkJfHwgKENGR19MQkNfTENSUiAmIDB4MGYpID09IDgpIHsKKwkJcHJpbnRmICgiXHRMQkM6ICVsdSBNSHpcbiIsCisJCQlzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwLyhDRkdfTEJDX0xDUlIgJiAweDBmKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJcdExCQzogdW5rbm93blxuIik7CisJfQorCXByaW50ZigiTDEgRC1jYWNoZSAzMktCLCBMMSBJLWNhY2hlIDMyS0IgZW5hYmxlZC5cbiIpOworCXJldHVybiAoMCk7Cit9CisKK2xvbmcgaW50IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKK3sKKwlsb25nIGRyYW1fc2l6ZSA9IDA7CisJZXh0ZXJuIGxvbmcgc3BkX3NkcmFtICh2b2lkKTsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisjaWYgIWRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmM9ICZpbW1hcC0+aW1fbGJjOworCXN5c19pbmZvX3Qgc3lzaW5mbzsKKwl1aW50IHRlbXBfbGJjZGxsID0gMDsKKyNlbmRpZgorI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpIHx8IGRlZmluZWQoQ09ORklHX0REUl9ETEwpCisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKKwl1aW50IHRlbXBfZGRyZGxsID0gMDsKKworCS8qIFdvcmsgYXJvdW5kIHRvIHN0YWJpbGl6ZSBERFIgRExMICovCisJdGVtcF9kZHJkbGwgPSBndXItPmRkcmRsbGNyOworCWd1ci0+ZGRyZGxsY3IgPSAoKHRlbXBfZGRyZGxsICYgMHhmZikgPDwgMTYpIHwgMHg4MDAwMDAwMDsKKwlhc20oInN5bmM7aXN5bmM7bXN5bmMiKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkKKwlkcmFtX3NpemUgPSBzcGRfc2RyYW0gKCk7CisjZWxzZQorCWRyYW1fc2l6ZSA9IGZpeGVkX3NkcmFtICgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19SQU1CT09UKQorCXJldHVybiBkcmFtX3NpemU7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpIC8qIExvY2FsQnVzIGlzIG5vdCBlbXVsYXRpbmcgZmxhc2ggKi8KKwlnZXRfc3lzX2luZm8oJnN5c2luZm8pOworCS8qIGlmIGxvY2FsYnVzIGZyZXEgaXMgbGVzcyB0aGFuIDY2TWh6LHdlIHVzZSBieXBhc3MgbW9kZSxvdGhlcndpc2UgdXNlIERMTCAqLworCWlmKHN5c2luZm8uZnJlcVN5c3RlbUJ1cy8oQ0ZHX0xCQ19MQ1JSICYgMHgwZikgPCA2NjAwMDAwMCkgeworCQlsYmMtPmxjcnIgPSAoQ0ZHX0xCQ19MQ1JSICYgMHgwZmZmZmZmZil8IDB4ODAwMDAwMDA7CisJfSBlbHNlIHsKKwkJbGJjLT5sY3JyID0gQ0ZHX0xCQ19MQ1JSICYgMHg3ZmZmZmZmZjsKKwkJdWRlbGF5KDIwMCk7CisJCXRlbXBfbGJjZGxsID0gZ3VyLT5sYmNkbGxjcjsKKwkJZ3VyLT5sYmNkbGxjciA9ICgodGVtcF9sYmNkbGwgJiAweGZmKSA8PCAxNiApIHwgMHg4MDAwMDAwMDsKKwkJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CisJfQorCWxiYy0+b3IyID0gQ0ZHX09SMl9QUkVMSU07IC8qIDY0TUIgU0RSQU0gKi8KKwlsYmMtPmJyMiA9IENGR19CUjJfUFJFTElNOworCWxiYy0+bGJjciA9IENGR19MQkNfTEJDUjsKKwlsYmMtPmxzZG1yID0gQ0ZHX0xCQ19MU0RNUl8xOworCWFzbSgic3luYyIpOworCSogKHVsb25nICopMCA9IDB4MDAwMDAwZmY7CisJbGJjLT5sc2RtciA9IENGR19MQkNfTFNETVJfMjsKKwlhc20oInN5bmMiKTsKKwkqICh1bG9uZyAqKTAgPSAweDAwMDAwMGZmOworCWxiYy0+bHNkbXIgPSBDRkdfTEJDX0xTRE1SXzM7CisJYXNtKCJzeW5jIik7CisJKiAodWxvbmcgKikwID0gMHgwMDAwMDBmZjsKKwlsYmMtPmxzZG1yID0gQ0ZHX0xCQ19MU0RNUl80OworCWFzbSgic3luYyIpOworCSogKHVsb25nICopMCA9IDB4MDAwMDAwZmY7CisJbGJjLT5sc2RtciA9IENGR19MQkNfTFNETVJfNTsKKwlhc20oInN5bmMiKTsKKwlsYmMtPmxzcnQgPSBDRkdfTEJDX0xTUlQ7CisJYXNtKCJzeW5jIik7CisJbGJjLT5tcnRwciA9IENGR19MQkNfTVJUUFI7CisJYXNtKCJzeW5jIik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisJeworCQkvKiBJbml0aWFsaXplIGFsbCBvZiBtZW1vcnkgZm9yIEVDQywgdGhlbgorCQkgKiBlbmFibGUgZXJyb3JzICovCisJCXVpbnQgKnAgPSAwOworCQl1aW50IGkgPSAwOworCQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gJmltbWFwLT5pbV9kZHI7CisJCWRtYV9pbml0KCk7CisJCWZvciAoKnAgPSAwOyBwIDwgKHVpbnQgKikoOCAqIDEwMjQpOyBwKyspIHsKKwkJCWlmICgoKHVuc2lnbmVkIGludClwICYgMHgxZikgPT0gMCkgeyBkY2J6KHApOyB9CisJCQkqcCA9ICh1bnNpZ25lZCBpbnQpMHhkZWFkYmVlZjsKKwkJCWlmICgoKHVuc2lnbmVkIGludClwICYgMHgxYykgPT0gMHgxYykgeyBkY2JmKHApOyB9CisJCX0KKworCQkvKiA4SyAqLworCQlkbWFfeGZlcigodWludCAqKTB4MjAwMCwweDIwMDAsKHVpbnQgKikwKTsKKwkJLyogMTZLICovCisJCWRtYV94ZmVyKCh1aW50ICopMHg0MDAwLDB4NDAwMCwodWludCAqKTApOworCQkvKiAzMksgKi8KKwkJZG1hX3hmZXIoKHVpbnQgKikweDgwMDAsMHg4MDAwLCh1aW50ICopMCk7CisJCS8qIDY0SyAqLworCQlkbWFfeGZlcigodWludCAqKTB4MTAwMDAsMHgxMDAwMCwodWludCAqKTApOworCQkvKiAxMjhrICovCisJCWRtYV94ZmVyKCh1aW50ICopMHgyMDAwMCwweDIwMDAwLCh1aW50ICopMCk7CisJCS8qIDI1NmsgKi8KKwkJZG1hX3hmZXIoKHVpbnQgKikweDQwMDAwLDB4NDAwMDAsKHVpbnQgKikwKTsKKwkJLyogNTEyayAqLworCQlkbWFfeGZlcigodWludCAqKTB4ODAwMDAsMHg4MDAwMCwodWludCAqKTApOworCQkvKiAxTSAqLworCQlkbWFfeGZlcigodWludCAqKTB4MTAwMDAwLDB4MTAwMDAwLCh1aW50ICopMCk7CisJCS8qIDJNICovCisJCWRtYV94ZmVyKCh1aW50ICopMHgyMDAwMDAsMHgyMDAwMDAsKHVpbnQgKikwKTsKKwkJLyogNE0gKi8KKwkJZG1hX3hmZXIoKHVpbnQgKikweDQwMDAwMCwweDQwMDAwMCwodWludCAqKTApOworCisJCWZvciAoaSA9IDE7IGkgPCBkcmFtX3NpemUgLyAweDgwMDAwMDsgaSsrKSB7CisJCQlkbWFfeGZlcigodWludCAqKSgweDgwMDAwMCppKSwweDgwMDAwMCwodWludCAqKTApOworCQl9CisKKwkJLyogRW5hYmxlIGVycm9ycyBmb3IgRUNDICovCisJCWRkci0+ZXJyX2Rpc2FibGUgPSAweDAwMDAwMDAwOworCQlhc20oInN5bmM7aXN5bmM7bXN5bmMiKTsKKwl9CisjZW5kaWYKKworCXJldHVybiBkcmFtX3NpemU7Cit9CisKKyNpZiBkZWZpbmVkKENGR19EUkFNX1RFU1QpCitpbnQgdGVzdGRyYW0gKHZvaWQpCit7CisJdWludCAqcHN0YXJ0ID0gKHVpbnQgKikgQ0ZHX01FTVRFU1RfU1RBUlQ7CisJdWludCAqcGVuZCA9ICh1aW50ICopIENGR19NRU1URVNUX0VORDsKKwl1aW50ICpwOworCisJcHJpbnRmKCJTRFJBTSB0ZXN0IHBoYXNlIDE6XG4iKTsKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspCisJCSpwID0gMHhhYWFhYWFhYTsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAoKnAgIT0gMHhhYWFhYWFhYSkgeworCQkJcHJpbnRmICgiU0RSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIlNEUkFNIHRlc3QgcGhhc2UgMjpcbiIpOworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweDU1NTU1NTU1OworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweDU1NTU1NTU1KSB7CisJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50ZigiU0RSQU0gdGVzdCBwYXNzZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGZpeGVkIHNkcmFtIGluaXQgLS0gZG9lc24ndCB1c2Ugc2VyaWFsIHByZXNlbmNlIGRldGVjdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitsb25nIGludCBmaXhlZF9zZHJhbSAodm9pZCkKK3sKKyNpZm5kZWYgQ0ZHX1JBTUJPT1QKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAmaW1tYXAtPmltX2RkcjsKKworCWRkci0+Y3MwX2JuZHMgPSBDRkdfRERSX0NTMF9CTkRTOworCWRkci0+Y3MwX2NvbmZpZyA9IENGR19ERFJfQ1MwX0NPTkZJRzsKKwlkZHItPnRpbWluZ19jZmdfMSA9IENGR19ERFJfVElNSU5HXzE7CisJZGRyLT50aW1pbmdfY2ZnXzIgPSBDRkdfRERSX1RJTUlOR18yOworCWRkci0+c2RyYW1fbW9kZSA9IENGR19ERFJfTU9ERTsKKwlkZHItPnNkcmFtX2ludGVydmFsID0gQ0ZHX0REUl9JTlRFUlZBTDsKKyNpZiBkZWZpbmVkIChDT05GSUdfRERSX0VDQykKKwlkZHItPmVycl9kaXNhYmxlID0gMHgwMDAwMDAwRDsKKwlkZHItPmVycl9zYmUgPSAweDAwZmYwMDAwOworI2VuZGlmCisJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CisJdWRlbGF5KDUwMCk7CisjaWYgZGVmaW5lZCAoQ09ORklHX0REUl9FQ0MpCisJLyogRW5hYmxlIEVDQyBjaGVja2luZyAqLworCWRkci0+c2RyYW1fY2ZnID0gKENGR19ERFJfQ09OVFJPTCB8IDB4MjAwMDAwMDApOworI2Vsc2UKKwlkZHItPnNkcmFtX2NmZyA9IENGR19ERFJfQ09OVFJPTDsKKyNlbmRpZgorCWFzbSgic3luYzsgaXN5bmM7IG1zeW5jIik7CisJdWRlbGF5KDUwMCk7CisjZW5kaWYKKwlyZXR1cm4gKENGR19TRFJBTV9TSVpFICogMTAyNCAqIDEwMjQpOworfQorI2VuZGlmCS8qICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU0MGV2YWwvdS1ib290LmxkcyBiL2JvYXJkL21wYzg1NDBldmFsL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3OWFmMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NDBldmFsL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwMywgTW90b3JvbGEsSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIEFzc3VtZXMgdGhhdCB0aGUgc2l6ZSBvZiB1LWJvb3QgaXMgbGVzcyB0aGFuIDUxMksgYW5kIHRoZQorICogc3RhcnQgYWRkcmVzcyBpcyBhbGlnbmVkIG9uIGEgNTEySyBibG9jay4KKyAqIEJvb3QgcGFnZSBhbmQgcmVzZXQgdmVjdG9yIGlzIHB1dCBhdCB0aGF0IGVuZCBvZiB0aGUgNTEySyBibG9jay4gKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC50ZXh0KQorICAgIGJvYXJkL21wYzg1NDBldmFsL2luaXQubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvdHJhcHMubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vICgudGV4dCkKKyAgICBsaWJfcHBjL2V4dGFibGUubyAoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vICgudGV4dCkKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgICB9CisgICAgX2V0ZXh0ID0gLjsKKyAgICBQUk9WSURFIChldGV4dCA9IC4pOworICAgIC5yb2RhdGEgICAgOgorICAgeworICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgICooLnJvZGF0YS5zdHIxLjQpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXykgPj4gMjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKKworICAuID0gKC4gJiAweEZGRjgwMDAwKSArIDB4MDAwN0YwMDA7CisgIC5ib290cGcgICA6CisgIHsKKyAgICBjcHUvbXBjODV4eC9zdGFydC5vCSguYm9vdHBnKQorICAgIGJvYXJkL21wYzg1NDBldmFsL2luaXQubyAoLmJvb3RwZykKKyAgfSA9IDB4ZmZmZgorCisgIC4gPSAoLiAmIDB4RkZGODAwMDApICsgMHgwMDA3RkZGQzsKKyAgLnJlc2V0dmVjICA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCit9CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTYwYWRzL2NvbmZpZy5tayBiL2JvYXJkL21wYzg1NjBhZHMvY29uZmlnLm1rCmluZGV4IDUzZTNlZGIuLjlhZWYyYmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NjBhZHMvY29uZmlnLm1rCisrKyBiL2JvYXJkL21wYzg1NjBhZHMvY29uZmlnLm1rCkBAIC0yOSw1ICsyOSw0IEBACiBURVhUX0JBU0UgPSAweGZmZjgwMDAwCiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01QQzg1eHg9MQotUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODU2MD0xCiBQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19FNTAwPTEKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjBhZHMvbXBjODU2MGFkcy5jIGIvYm9hcmQvbXBjODU2MGFkcy9tcGM4NTYwYWRzLmMKaW5kZXggMTk5MGU1NC4uOWFjY2M1YyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2MGFkcy9tcGM4NTYwYWRzLmMKKysrIGIvYm9hcmQvbXBjODU2MGFkcy9tcGM4NTYwYWRzLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxzcGQuaD4KICNpbmNsdWRlIDxtaWlwaHkuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogZXh0ZXJuIHZvaWQgZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSk7CiAjZW5kaWYKIApAQCAtMjkzLDcgKzI5Myw3IEBACiAJZHJhbV9zaXplID0gZml4ZWRfc2RyYW0gKCk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogCS8qCiAJICogSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIEREUiBFQ0MuCiAJICovCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTYwYWRzL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM4NTYwYWRzL3UtYm9vdC5sZHMKaW5kZXggNGM2YzdkYi4uYzMwN2Q2MyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2MGFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL21wYzg1NjBhZHMvdS1ib290LmxkcwpAQCAtNzMsNyArNzMsNiBAQAogICAgIGNwdS9tcGM4NXh4L2V0aGVyX2ZjYy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCi0gICAgY3B1L21wYzg1eHgvdHNlYy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9zcGVlZC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9pMmMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BkX3NkcmFtLm8gKC50ZXh0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvcG04NTQvdS1ib290LmxkcyBiL2JvYXJkL3BtODU0L3UtYm9vdC5sZHMKaW5kZXggNWYyNGY3Ni4uNGRiNmIzNCAxMDA2NDQKLS0tIGEvYm9hcmQvcG04NTQvdS1ib290LmxkcworKysgYi9ib2FyZC9wbTg1NC91LWJvb3QubGRzCkBAIC03MCw3ICs3MCw2IEBACiAgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCi0gICAgY3B1L21wYzg1eHgvdHNlYy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9zcGVlZC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9wY2kubyAoLnRleHQpCiAgICAgY29tbW9uL2RsbWFsbG9jLm8gKC50ZXh0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODU2MC9jb25maWcubWsgYi9ib2FyZC9zYmM4NTYwL2NvbmZpZy5tawppbmRleCAzYzhjZmJlLi42ZDlhZTQ1IDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTYwL2NvbmZpZy5taworKysgYi9ib2FyZC9zYmM4NTYwL2NvbmZpZy5tawpAQCAtMzAsNSArMzAsNCBAQAogVEVYVF9CQVNFID0gMHhmZmZjMDAwMAogCiBQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NXh4PTEKLVBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01QQzg1NjA9MQogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfRTUwMD0xCmRpZmYgLS1naXQgYS9ib2FyZC9zdHhncDMvY29uZmlnLm1rIGIvYm9hcmQvc3R4Z3AzL2NvbmZpZy5tawppbmRleCAxNGMxZjAxLi4yNDI3ODE4IDEwMDY0NAotLS0gYS9ib2FyZC9zdHhncDMvY29uZmlnLm1rCisrKyBiL2JvYXJkL3N0eGdwMy9jb25maWcubWsKQEAgLTI5LDUgKzI5LDQgQEAKIFRFWFRfQkFTRSA9IDB4ZmZmODAwMDAKIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODV4eD0xCi1QTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NTYwPTEKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0U1MDA9MQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3R4Z3AzL3UtYm9vdC5sZHMgYi9ib2FyZC9zdHhncDMvdS1ib290LmxkcwppbmRleCA1ODc5OTQ2Li5kYWU1YWNiIDEwMDY0NAotLS0gYS9ib2FyZC9zdHhncDMvdS1ib290LmxkcworKysgYi9ib2FyZC9zdHhncDMvdS1ib290LmxkcwpAQCAtNzgsNyArNzgsNiBAQAogICAgIGNwdS9tcGM4NXh4L2V0aGVyX2ZjYy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCi0gICAgY3B1L21wYzg1eHgvdHNlYy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9zcGVlZC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9pMmMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BkX3NkcmFtLm8gKC50ZXh0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtODU0MC91LWJvb3QubGRzIGIvYm9hcmQvdHFtODU0MC91LWJvb3QubGRzCmluZGV4IGViODRhZWIuLmZmZDc1NjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTg1NDAvdS1ib290LmxkcworKysgYi9ib2FyZC90cW04NTQwL3UtYm9vdC5sZHMKQEAgLTcwLDcgKzcwLDYgQEAKICAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKLSAgICBjcHUvbXBjODV4eC90c2VjLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3NwZWVkLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3BjaS5vICgudGV4dCkKICAgICBjb21tb24vZGxtYWxsb2MubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC90cW04NTYwL3UtYm9vdC5sZHMgYi9ib2FyZC90cW04NTYwL3UtYm9vdC5sZHMKaW5kZXggMTliNzdiZS4uZWJlMjI0MCAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtODU2MC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3RxbTg1NjAvdS1ib290LmxkcwpAQCAtNzAsNyArNzAsNiBAQAogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1Lm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L3RzZWMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQogICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYmRpbmZvLmMgYi9jb21tb24vY21kX2JkaW5mby5jCmluZGV4IDZmMjllMmYuLjQ5MTRhYzUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYmRpbmZvLmMKKysrIGIvY29tbW9uL2NtZF9iZGluZm8uYwpAQCAtNzAsMTMgKzcwLDEzIEBACiAJcHJpbnRfc3RyICgicGNpX2J1c2ZyZXEiLCAgIHN0cm1oeihidWYsIGJkLT5iaV9wY2lfYnVzZnJlcSkpOwogI2VuZGlmCiAjZWxzZQkvKiAhIENPTkZJR180MDVHUCwgQ09ORklHXzQwNUNSLCBDT05GSUdfNDA1RVAsIENPTkZJR19YSUxJTlhfTUwzMDAsIENPTkZJR180NDBfRVAgQ09ORklHXzQ0MF9HUiAqLwotI2lmIGRlZmluZWQoQ09ORklHXzgyNjApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NjApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKIAlwcmludF9zdHIgKCJ2Y28iLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3ZjbykpOwogCXByaW50X3N0ciAoInNjY2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3NjY2ZyZXEpKTsKIAlwcmludF9zdHIgKCJicmdmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9icmdmcmVxKSk7CiAjZW5kaWYKIAlwcmludF9zdHIgKCJpbnRmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9pbnRmcmVxKSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfODI2MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU2MCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQogCXByaW50X3N0ciAoImNwbWZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2NwbWZyZXEpKTsKICNlbmRpZgogCXByaW50X3N0ciAoImJ1c2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2J1c2ZyZXEpKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCBhOTA3MzVmLi5jMjAwZmQ4IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC01ODAsMTIgKzU4MCwxMiBAQAogCWtiZC0+YmlfZmxiZnJlcSAvPSAxMDAwMDAwTDsKIAlrYmQtPmJpX3Zjb2ZyZXEgLz0gMTAwMDAwMEw7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR184MjYwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTYwKQorI2lmIGRlZmluZWQoQ09ORklHX0NQTTIpCiAJCWtiZC0+YmlfY3BtZnJlcSAvPSAxMDAwMDAwTDsKIAkJa2JkLT5iaV9icmdmcmVxIC89IDEwMDAwMDBMOwogCQlrYmQtPmJpX3NjY2ZyZXEgLz0gMTAwMDAwMEw7CiAJCWtiZC0+YmlfdmNvICAgICAvPSAxMDAwMDAwTDsKLSNlbmRpZiAvKiBDT05GSUdfODI2MCAqLworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDNXh4eCkKIAkJa2JkLT5iaV9pcGJmcmVxIC89IDEwMDAwMDBMOwogCQlrYmQtPmJpX3BjaWZyZXEgLz0gMTAwMDAwMEw7CmRpZmYgLS1naXQgYS9jb25maWcubWsgYi9jb25maWcubWsKaW5kZXggNzViYmFjNS4uZmY4MzA5MSAxMDA2NDQKLS0tIGEvY29uZmlnLm1rCisrKyBiL2NvbmZpZy5tawpAQCAtMTYxLDYgKzE2MSwxMCBAQAogZW5kaWYKIGVuZGlmCiAKK2lmZXEgKCQoUENJX0NMT0NLKSxQQ0lfNjZNKQorQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtRFBDSV82Nk0KK2VuZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogZXhwb3J0CUNPTkZJR19TSEVMTCBIUEFUSCBIT1NUQ0MgSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIFwKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL2NvbmZpZy5tayBiL2NwdS9tcGM4MjYwL2NvbmZpZy5tawppbmRleCAzYjI4OTI0Li5kZDdhNzFmIDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9jb25maWcubWsKKysrIGIvY3B1L21wYzgyNjAvY29uZmlnLm1rCkBAIC0yMyw1ICsyMyw1IEBACiAKIFBMQVRGT1JNX1JFTEZMQUdTICs9IC1mUElDIC1mZml4ZWQtcjE0IC1tZWFiaQogCi1QTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR184MjYwIC1mZml4ZWQtcjIgLWZmaXhlZC1yMjkgXAorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfODI2MCAtRENPTkZJR19DUE0yIC1mZml4ZWQtcjIgLWZmaXhlZC1yMjkgXAogCQkgICAgIC1tc3RyaW5nIC1tY3B1PTYwM2UgLW1tdWx0aXBsZQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvTWFrZWZpbGUgYi9jcHUvbXBjODN4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDU3NGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvTWFrZWZpbGUKQEAgLTAsMCArMSw1MyBAQAorIworIyBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChDUFUpLmEKKworU1RBUlQJPSBzdGFydC5vIFwKKwlyZXNldHZlYy5vCisKK0NPQkpTCT0gdHJhcHMubyBcCisJICBjcHUubyBcCisJICBjcHVfaW5pdC5vIFwKKwkgIHNwZWVkLm8gXAorCSAgaW50ZXJydXB0cy5vIFwKKwkgIHBjaS5vIFwKKwkgIGkyYy5vIFwKKwkgIHNwZF9zZHJhbS5vCisKK09CSlMJPSAkKENPQkpTKQorCithbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9jb25maWcubWsgYi9jcHUvbXBjODN4eC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0ZmY5MgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4M3h4L2NvbmZpZy5tawpAQCAtMCwwICsxLDI2IEBACisjCisjIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1mUElDIC1mZml4ZWQtcjE0IC1tZWFiaQorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4M1hYIC1EQ09ORklHX0UzMDAgXAorCQkJLWZmaXhlZC1yMiAtZmZpeGVkLXIyOSAtbXNvZnQtZmxvYXQKZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L2NwdS5jIGIvY3B1L21wYzgzeHgvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0YWViNAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4M3h4L2NwdS5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBDaGFuZ2UgbG9nOgorICoKKyAqIDIwMDUwMTAxOiBFcmFuIExpYmVydHkgKGxpYmVydHlAZnJlZXNjYWxlLmNvbSkKKyAqCSAgICAgSW5pdGlhbCBmaWxlIGNyZWF0aW5nIChwb3J0aW5nIGZyb20gODVYWCAmIDgyNjApCisgKi8KKworLyoKKyAqIENQVSBzcGVjaWZpYyBjb2RlIGZvciB0aGUgTVBDODN4eCBmYW1pbHkuCisgKgorICogRGVyaXZlZCBmcm9tIHRoZSBNUEM4MjYwIGFuZCBNUEM4NXh4LgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx3YXRjaGRvZy5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxtcGM4M3h4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisKK2ludCBjaGVja2NwdSh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCXVsb25nIGNsb2NrID0gZ2QtPmNwdV9jbGs7CisJdTMyIHB2ciA9IGdldF9wdnIoKTsKKwljaGFyIGJ1ZlszMl07CisKKwlpZiAoKHB2ciAmIDB4RkZGRjAwMDApICE9IFBWUl84M3h4KSB7CisJCXB1dHMoIk5vdCBNUEM4M3h4IEZhbWlseSEhIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwdXRzKCJDUFU6IE1QQzgzeHgsICIpOworCXN3aXRjaChwdnIpIHsKKwljYXNlIFBWUl84MzQ5X1JFVjEwOgorCQlicmVhazsKKwljYXNlIFBWUl84MzQ5X1JFVjExOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwdXRzKCJSZXY6IFVua25vd25cbiIpOworCQlyZXR1cm4gLTE7CS8qIE5vdCBzdXJlIHdoYXQgdGhpcyBpcyAqLworCX0KKwlwcmludGYoIlJldjogJTAyeCBhdCAlcyBNSHpcbiIscHZyICYgMHgwMDAwRkZGRiwgc3RybWh6KGJ1ZiwgY2xvY2spKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIHVwbWNvbmZpZyAodWludCB1cG0sIHVpbnQgKnRhYmxlLCB1aW50IHNpemUpCit7CisJaGFuZygpOwkJLyogRklYTUU6IHVwY29uZmlnKCkgbmVlZGVkPyAqLworfQorCisKK2ludAorZG9fcmVzZXQgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bG9uZyBtc3I7CisjaWZuZGVmIE1QQzgzeHhfUkVTRVQKKwl1bG9uZyBhZGRyOworI2VuZGlmCisKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SQkFSOworCisjaWZkZWYgTVBDODN4eF9SRVNFVAorCS8qIEludGVycnVwdHMgYW5kIE1NVSBvZmYgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mbXNyICAgICUwIjoiPXIiIChtc3IpOik7CisKKwltc3IgJj0gfiggTVNSX0VFIHwgTVNSX0lSIHwgTVNSX0RSKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm10bXNyICAgICUwIjo6InIiIChtc3IpKTsKKworCS8qIGVuYWJsZSBSZXNldCBDb250cm9sIFJlZyAqLworCWltbWFwLT5yZXNldC5ycHIgPSAweDUyNTM1NDQ1OworCisJLyogY29uZmlybSBSZXNldCBDb250cm9sIFJlZyBpcyBlbmFibGVkICovCisJd2hpbGUoISgoaW1tYXAtPnJlc2V0LnJjZXIpICYgUkNFUl9DUkUpKTsKKworCXByaW50ZigiUmVzZXR0aW5nIHRoZSBib2FyZC4iKTsKKwlwcmludGYoIlxuIik7CisKKwl1ZGVsYXkoMjAwKTsKKworCS8qIHBlcmZvcm0gcmVzZXQsIG9ubHkgb25lIGJpdCAqLworCWltbWFwLT5yZXNldC5yY3IgPSBSQ1JfU1dIUjsKKworI2Vsc2UJLyogISBNUEM4M3h4X1JFU0VUICovCisKKwlpbW1hcC0+cmVzZXQucm1yID0gUk1SX0NTUkU7ICAgIC8qIENoZWNrc3RvcCBSZXNldCBlbmFibGUgKi8KKworCS8qIEludGVycnVwdHMgYW5kIE1NVSBvZmYgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1mbXNyICAgICUwIjoiPXIiIChtc3IpOik7CisKKwltc3IgJj0gfihNU1JfTUUgfCBNU1JfRUUgfCBNU1JfSVIgfCBNU1JfRFIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgibXRtc3IgICAgJTAiOjoiciIgKG1zcikpOworCisJLyoKKwkgKiBUcnlpbmcgdG8gZXhlY3V0ZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBhdCBhIG5vbi1leGlzdGluZyBhZGRyZXNzCisJICogc2hvdWxkIGNhdXNlIGEgbWFjaGluZSBjaGVjaywgcmVzdWx0aW5nIGluIHJlc2V0CisJICovCisJYWRkciA9IENGR19SRVNFVF9BRERSRVNTOworCisJcHJpbnRmKCJyZXNldHRpbmcgdGhlIGJvYXJkLiIpOworCXByaW50ZigiXG4iKTsKKwkoKHZvaWQgKCopKHZvaWQpKSBhZGRyKSAoKTsKKyNlbmRpZgkvKiBNUEM4M3h4X1JFU0VUICovCisKKwlyZXR1cm4gMTsKK30KKworCisvKgorICogR2V0IHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSAobGlrZSBjcHVfY2xrIGluIEh6KQorICovCisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwl1bG9uZyB0YmNsazsKKworCXRiY2xrID0gKGdkLT5idXNfY2xrICsgM0wpIC8gNEw7CisKKwlyZXR1cm4gdGJjbGs7Cit9CisKKworI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQordm9pZCB3YXRjaGRvZ19yZXNldCAodm9pZCkKK3sKKwloYW5nKCk7CQkvKiBGSVhNRTogaW1wbGVtZW50IHdhdGNoZG9nX3Jlc2V0KCk/ICovCit9CisjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HICovCmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9jcHVfaW5pdC5jIGIvY3B1L21wYzgzeHgvY3B1X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2IzNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvY3B1X2luaXQuYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogQ2hhbmdlIGxvZzoKKyAqCisgKiAyMDA1MDEwMTogRXJhbiBMaWJlcnR5IChsaWJlcnR5QGZyZWVzY2FsZS5jb20pCisgKiAgICAgICAgICAgSW5pdGlhbCBmaWxlIGNyZWF0aW5nIChwb3J0aW5nIGZyb20gODVYWCAmIDgyNjApCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzgzeHguaD4KKyNpbmNsdWRlIDxpb3BvcnRzLmg+CisKKy8qCisgKiBCcmVhdGhlIHNvbWUgbGlmZSBpbnRvIHRoZSBDUFUuLi4KKyAqCisgKiBTZXQgdXAgdGhlIG1lbW9yeSBtYXAsCisgKiBpbml0aWFsaXplIGEgYnVuY2ggb2YgcmVnaXN0ZXJzLAorICogaW5pdGlhbGl6ZSB0aGUgVVBNJ3MKKyAqLwordm9pZCBjcHVfaW5pdF9mICh2b2xhdGlsZSBpbW1hcF90ICogaW0pCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwkvKiBQb2ludGVyIGlzIHdyaXRhYmxlIHNpbmNlIHdlIGFsbG9jYXRlZCBhIHJlZ2lzdGVyIGZvciBpdCAqLworCWdkID0gKGdkX3QgKikgKENGR19JTklUX1JBTV9BRERSICsgQ0ZHX0dCTF9EQVRBX09GRlNFVCk7CisKKwkvKiBDbGVhciBpbml0aWFsIGdsb2JhbCBkYXRhICovCisJbWVtc2V0ICgodm9pZCAqKSBnZCwgMCwgc2l6ZW9mIChnZF90KSk7CisKKwkvKiBSU1IgLSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLSBjbGVhciBhbGwgc3RhdHVzICg0LjYuMS4zKSAqLworCWdkLT5yZXNldF9zdGF0dXMgPSBpbS0+cmVzZXQucnNyOworCWltLT5yZXNldC5yc3IgPSB+KFJTUl9SRVMpOworCisJLyoKKwkgKiBSTVIgLSBSZXNldCBNb2RlIFJlZ2lzdGVyCisJICogY29udGFpbnMgY2hlY2tzdG9wIHJlc2V0IGVuYWJsZSAoNC42LjEuNCkKKwkgKi8KKwlpbS0+cmVzZXQucm1yID0gKFJNUl9DU1JFICYgKDE8PFJNUl9DU1JFX1NISUZUKSk7CisKKwkvKiBMQ1JSIC0gQ2xvY2sgUmF0aW8gUmVnaXN0ZXIgKDEwLjMuMS4xNikgKi8KKwlpbS0+bGJ1cy5sY3JyID0gQ0ZHX0xDUlI7CisKKwkvKiBFbmFibGUgVGltZSBCYXNlICYgRGVjcmltZW50ZXIgKCBzbyB3ZSB3aWxsIGhhdmUgdWRlbGF5KCkgKSovCisJaW0tPnN5c2NvbmYuc3BjciB8PSBTUENSX1RCRU47CisKKwkvKiBTeXN0ZW0gR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyICovCisJaW0tPnN5c2NvbmYuc2ljcmggPSBTSUNSSF9UU09CSTE7CisJaW0tPnN5c2NvbmYuc2ljcmwgPSBTSUNSTF9MRFBfQTsKKworCS8qCisJICogTWVtb3J5IENvbnRyb2xsZXI6CisJICovCisKKwkvKiBNYXAgYmFua3MgMCBhbmQgMSB0byB0aGUgRkxBU0ggYmFua3MgMCBhbmQgMSBhdCBwcmVsaW1pbmFyeQorCSAqIGFkZHJlc3NlcyAtIHRoZXNlIGhhdmUgdG8gYmUgbW9kaWZpZWQgbGF0ZXIgd2hlbiBGTEFTSCBzaXplCisJICogaGFzIGJlZW4gZGV0ZXJtaW5lZAorCSAqLworCisjaWYgZGVmaW5lZChDRkdfQlIwX1BSRUxJTSkgIFwKKwkmJiBkZWZpbmVkKENGR19PUjBfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdCQVIwX1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQVIwX1BSRUxJTSkKKwlpbS0+bGJ1cy5iYW5rWzBdLmJyID0gQ0ZHX0JSMF9QUkVMSU07CisJaW0tPmxidXMuYmFua1swXS5vciA9IENGR19PUjBfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzBdLmJhciA9IENGR19MQkxBV0JBUjBfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzBdLmFyID0gQ0ZHX0xCTEFXQVIwX1BSRUxJTTsKKyNlbHNlCisjZXJyb3IgCUNGR19CUjBfUFJFTElNLCBDRkdfT1IwX1BSRUxJTSwgQ0ZHX0xCTEFXQkFSMF9QUkVMSU0gJiBDRkdfTEJMQVdBUjBfUFJFTElNIG11c3QgYmUgZGVmaW5lZAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19CUjFfUFJFTElNKSAgXAorCSYmIGRlZmluZWQoQ0ZHX09SMV9QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0JBUjFfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdBUjFfUFJFTElNKQorCWltLT5sYnVzLmJhbmtbMV0uYnIgPSBDRkdfQlIxX1BSRUxJTTsKKwlpbS0+bGJ1cy5iYW5rWzFdLm9yID0gQ0ZHX09SMV9QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbMV0uYmFyID0gQ0ZHX0xCTEFXQkFSMV9QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbMV0uYXIgPSBDRkdfTEJMQVdBUjFfUFJFTElNOworI2VuZGlmCisjaWYgZGVmaW5lZChDRkdfQlIyX1BSRUxJTSkgIFwKKwkmJiBkZWZpbmVkKENGR19PUjJfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdCQVIyX1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQVIyX1BSRUxJTSkKKwlpbS0+bGJ1cy5iYW5rWzJdLmJyID0gQ0ZHX0JSMl9QUkVMSU07CisJaW0tPmxidXMuYmFua1syXS5vciA9IENGR19PUjJfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzJdLmJhciA9IENGR19MQkxBV0JBUjJfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzJdLmFyID0gQ0ZHX0xCTEFXQVIyX1BSRUxJTTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ0ZHX0JSM19QUkVMSU0pICBcCisJJiYgZGVmaW5lZChDRkdfT1IzX1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQkFSM19QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0FSM19QUkVMSU0pCisJaW0tPmxidXMuYmFua1szXS5iciA9IENGR19CUjNfUFJFTElNOworCWltLT5sYnVzLmJhbmtbM10ub3IgPSBDRkdfT1IzX1BSRUxJTTsKKwlpbS0+c3lzY29uZi5sYmxhd1szXS5iYXIgPSBDRkdfTEJMQVdCQVIzX1BSRUxJTTsKKwlpbS0+c3lzY29uZi5sYmxhd1szXS5hciA9IENGR19MQkxBV0FSM19QUkVMSU07CisjZW5kaWYKKyNpZiBkZWZpbmVkKENGR19CUjRfUFJFTElNKSAgXAorCSYmIGRlZmluZWQoQ0ZHX09SNF9QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0JBUjRfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdBUjRfUFJFTElNKQorCWltLT5sYnVzLmJhbmtbNF0uYnIgPSBDRkdfQlI0X1BSRUxJTTsKKwlpbS0+bGJ1cy5iYW5rWzRdLm9yID0gQ0ZHX09SNF9QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbNF0uYmFyID0gQ0ZHX0xCTEFXQkFSNF9QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbNF0uYXIgPSBDRkdfTEJMQVdBUjRfUFJFTElNOworI2VuZGlmCisjaWYgZGVmaW5lZChDRkdfQlI1X1BSRUxJTSkgIFwKKwkmJiBkZWZpbmVkKENGR19PUjVfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdCQVI1X1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQVI1X1BSRUxJTSkKKwlpbS0+bGJ1cy5iYW5rWzVdLmJyID0gQ0ZHX0JSNV9QUkVMSU07CisJaW0tPmxidXMuYmFua1s1XS5vciA9IENGR19PUjVfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzVdLmJhciA9IENGR19MQkxBV0JBUjVfUFJFTElNOworCWltLT5zeXNjb25mLmxibGF3WzVdLmFyID0gQ0ZHX0xCTEFXQVI1X1BSRUxJTTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ0ZHX0JSNl9QUkVMSU0pICBcCisJJiYgZGVmaW5lZChDRkdfT1I2X1BSRUxJTSkgXAorCSYmIGRlZmluZWQoQ0ZHX0xCTEFXQkFSNl9QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0FSNl9QUkVMSU0pCisJaW0tPmxidXMuYmFua1s2XS5iciA9IENGR19CUjZfUFJFTElNOworCWltLT5sYnVzLmJhbmtbNl0ub3IgPSBDRkdfT1I2X1BSRUxJTTsKKwlpbS0+c3lzY29uZi5sYmxhd1s2XS5iYXIgPSBDRkdfTEJMQVdCQVI2X1BSRUxJTTsKKwlpbS0+c3lzY29uZi5sYmxhd1s2XS5hciA9IENGR19MQkxBV0FSNl9QUkVMSU07CisjZW5kaWYKKyNpZiBkZWZpbmVkKENGR19CUjdfUFJFTElNKSAgXAorCSYmIGRlZmluZWQoQ0ZHX09SN19QUkVMSU0pIFwKKwkmJiBkZWZpbmVkKENGR19MQkxBV0JBUjdfUFJFTElNKSBcCisJJiYgZGVmaW5lZChDRkdfTEJMQVdBUjdfUFJFTElNKQorCWltLT5sYnVzLmJhbmtbN10uYnIgPSBDRkdfQlI3X1BSRUxJTTsKKwlpbS0+bGJ1cy5iYW5rWzddLm9yID0gQ0ZHX09SN19QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbN10uYmFyID0gQ0ZHX0xCTEFXQkFSN19QUkVMSU07CisJaW0tPnN5c2NvbmYubGJsYXdbN10uYXIgPSBDRkdfTEJMQVdBUjdfUFJFTElNOworI2VuZGlmCit9CisKKworLyoKKyAqIEluaXRpYWxpemUgaGlnaGVyIGxldmVsIHBhcnRzIG9mIENQVSBsaWtlIHRpbWUgYmFzZSBhbmQgdGltZXJzLgorICovCisKK2ludCBjcHVfaW5pdF9yICh2b2lkKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvaTJjLmMgYi9jcHUvbXBjODN4eC9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGI3ZDJjCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvaTJjLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMsTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbyA8eC54aWFvQG1vdG9yb2xhLmNvbT4KKyAqIEFkYXB0ZWQgZm9yIE1vdG9yb2xhIDg1eHggY2hpcC4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEdsZWIgTmF0YXBvdiA8Z25hdGFwb3ZAbXJ2LmNvbT4KKyAqIFNvbWUgYml0cyBhcmUgdGFrZW4gZnJvbSBsaW51eCBkcml2ZXIgd3JpdGVuIGJ5IGFkcmlhbkBodW1ib2xkdC5jby51aworICoKKyAqIEhhcmR3YXJlIEkyQyBkcml2ZXIgZm9yIE1QQzEwNyBQQ0kgYnJpZGdlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIENoYW5nZSBsb2c6CisgKgorICogMjAwNTAxMDE6IEVyYW4gTGliZXJ0eSAobGliZXJ0eUBmcmVlc2NhbGUuY29tKQorICogICAgICAgICAgIEluaXRpYWwgZmlsZSBjcmVhdGluZyAocG9ydGluZyBmcm9tIDg1WFggJiA4MjYwKQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZmRlZiBDT05GSUdfSEFSRF9JMkMKKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxhc20vaTJjLmg+CisKKyNpZmRlZiBDT05GSUdfTVBDODM0OUFEUworaTJjX3QgKiBtcGM4MzQ5X2kyYyA9IChpMmNfdCopKENGR19JTU1SQkFSICsgQ0ZHX0kyQ19PRkZTRVQpOworI2VuZGlmCisKK3ZvaWQKK2kyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkKQoreworCS8qIHN0b3AgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMHgwMCAsICZJMkMtPmNyKTsKKworCS8qIHNldCBjbG9jayAqLworCXdyaXRlYigweDNmLCAmSTJDLT5mZHIpOworCisJLyogc2V0IGRlZmF1bHQgZmlsdGVyICovCisJd3JpdGViKDB4MTAsJkkyQy0+ZGZzcnIpOworCisJLyogd3JpdGUgc2xhdmUgYWRkcmVzcyAqLworCXdyaXRlYihzbGF2ZWFkZCwgJkkyQy0+YWRyKTsKKworCS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCXdyaXRlYigweDAwLCAmSTJDLT5zcik7CisKKwkvKiBzdGFydCBJMkMgY29udHJvbGxlciAqLworCXdyaXRlYihJMkNfQ1JfTUVOLCAmSTJDLT5jcik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAoraTJjX3dhaXQ0YnVzICh2b2lkKQoreworCXVsb25nIHRpbWV2YWwgPSBnZXRfdGltZXIgKDApOworCXdoaWxlIChyZWFkYigmSTJDLT5zcikgJiBJMkNfU1JfTUJCKSB7CisJCWlmIChnZXRfdGltZXIgKHRpbWV2YWwpID4gSTJDX1RJTUVPVVQpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50CitpMmNfd2FpdCAoaW50IHdyaXRlKQoreworCXUzMiBjc3I7CisJdWxvbmcgdGltZXZhbCA9IGdldF90aW1lcigwKTsKKwlkbyB7CisJCWNzciA9IHJlYWRiKCZJMkMtPnNyKTsKKworCQlpZiAoIShjc3IgJiBJMkNfU1JfTUlGKSkKKwkJCWNvbnRpbnVlOworCisJCXdyaXRlYigweDAsICZJMkMtPnNyKTsKKworCQlpZiAoY3NyICYgSTJDX1NSX01BTCkgeworCQkJZGVidWcoImkyY193YWl0OiBNQUxcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCEoY3NyICYgSTJDX1NSX01DRikpCXsKKwkJCWRlYnVnKCJpMmNfd2FpdDogdW5maW5pc2hlZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAod3JpdGUgPT0gSTJDX1dSSVRFICYmIChjc3IgJiBJMkNfU1JfUlhBSykpIHsKKwkJCWRlYnVnKCJpMmNfd2FpdDogTm8gUlhBQ0tcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcmV0dXJuIDA7CisJfSB3aGlsZSAoZ2V0X3RpbWVyICh0aW1ldmFsKSA8IEkyQ19USU1FT1VUKTsKKwlkZWJ1ZygiaTJjX3dhaXQ6IHRpbWVkIG91dFxuIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAoraTJjX3dyaXRlX2FkZHIgKHU4IGRldiwgdTggZGlyLCBpbnQgcnN0YSkKK3sKKwl3cml0ZWIoSTJDX0NSX01FTiB8IEkyQ19DUl9NU1RBIHwgSTJDX0NSX01UWCB8CisJICAgICAgIChyc3RhP0kyQ19DUl9SU1RBOjApLAorCSAgICAgICAmSTJDLT5jcik7CisKKwl3cml0ZWIoKGRldiA8PCAxKSB8IGRpciwgJkkyQy0+ZHIpOworCisJaWYgKGkyY193YWl0IChJMkNfV1JJVEUpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAorX19pMmNfd3JpdGUgKHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCisJd3JpdGViKEkyQ19DUl9NRU4gfCBJMkNfQ1JfTVNUQSB8IEkyQ19DUl9NVFgsCisJICAgICAgICZJMkMtPmNyKTsKKworCWZvciAoaT0wOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJd3JpdGViKGRhdGFbaV0sICZJMkMtPmRyKTsKKworCQlpZiAoaTJjX3dhaXQgKEkyQ19XUklURSkgPCAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19faTJjX3JlYWQgKHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCisJd3JpdGViKEkyQ19DUl9NRU4gfCBJMkNfQ1JfTVNUQSB8CisJICAgICAgICgobGVuZ3RoID09IDEpID8gSTJDX0NSX1RYQUsgOiAwKSwKKwkgICAgICAgJkkyQy0+Y3IpOworCisJLyogZHVtbXkgcmVhZCAqLworCXJlYWRiKCZJMkMtPmRyKTsKKworCWZvciAoaT0wOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGkyY193YWl0IChJMkNfUkVBRCkgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogR2VuZXJhdGUgYWNrIG9uIGxhc3QgbmV4dCB0byBsYXN0IGJ5dGUgKi8KKwkJaWYgKGkgPT0gbGVuZ3RoIC0gMikKKwkJCXdyaXRlYihJMkNfQ1JfTUVOIHwgSTJDX0NSX01TVEEgfAorCQkJICAgICAgIEkyQ19DUl9UWEFLLAorCQkJICAgICAgICZJMkMtPmNyKTsKKworCQkvKiBHZW5lcmF0ZSBzdG9wIG9uIGxhc3QgYnl0ZSAqLworCQlpZiAoaSA9PSBsZW5ndGggLSAxKQorCQkJd3JpdGViKEkyQ19DUl9NRU4gfCBJMkNfQ1JfVFhBSywgJkkyQy0+Y3IpOworCisJCWRhdGFbaV0gPSByZWFkYigmSTJDLT5kcik7CisJfQorCXJldHVybiBpOworfQorCitpbnQKK2kyY19yZWFkICh1OCBkZXYsIHVpbnQgYWRkciwgaW50IGFsZW4sIHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpID0gMDsKKwl1OCAqYSA9ICh1OCopJmFkZHI7CisKKwlpZiAoaTJjX3dhaXQ0YnVzICgpIDwgMCkKKwkJZ290byBleGl0OworCisJaWYgKGkyY193cml0ZV9hZGRyIChkZXYsIEkyQ19XUklURSwgMCkgPT0gMCkKKwkJZ290byBleGl0OworCisJaWYgKF9faTJjX3dyaXRlICgmYVs0IC0gYWxlbl0sIGFsZW4pICE9IGFsZW4pCisJCWdvdG8gZXhpdDsKKworCWlmIChpMmNfd3JpdGVfYWRkciAoZGV2LCBJMkNfUkVBRCwgMSkgPT0gMCkKKwkJZ290byBleGl0OworCisJaSA9IF9faTJjX3JlYWQgKGRhdGEsIGxlbmd0aCk7CisKKyBleGl0OgorCXdyaXRlYihJMkNfQ1JfTUVOLCAmSTJDLT5jcik7CisJcmV0dXJuICEoaSA9PSBsZW5ndGgpOworfQorCitpbnQKK2kyY193cml0ZSAodTggZGV2LCB1aW50IGFkZHIsIGludCBhbGVuLCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSA9IDA7CisJdTggKmEgPSAodTgqKSZhZGRyOworCisJaWYgKGkyY193YWl0NGJ1cyAoKSA8IDApCisJCWdvdG8gZXhpdDsKKworCWlmIChpMmNfd3JpdGVfYWRkciAoZGV2LCBJMkNfV1JJVEUsIDApID09IDApCisJCWdvdG8gZXhpdDsKKworCWlmIChfX2kyY193cml0ZSAoJmFbNCAtIGFsZW5dLCBhbGVuKSAhPSBhbGVuKQorCQlnb3RvIGV4aXQ7CisKKwlpID0gX19pMmNfd3JpdGUgKGRhdGEsIGxlbmd0aCk7CisKKyBleGl0OgorCXdyaXRlYihJMkNfQ1JfTUVOLCAmSTJDLT5jcik7CisJcmV0dXJuICEoaSA9PSBsZW5ndGgpOworfQorCitpbnQgaTJjX3Byb2JlICh1Y2hhciBjaGlwKQoreworCWludCB0bXA7CisKKwkvKgorCSAqIFRyeSB0byByZWFkIHRoZSBmaXJzdCBsb2NhdGlvbiBvZiB0aGUgY2hpcC4gIFRoZSB1bmRlcmx5aW5nCisJICogZHJpdmVyIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgc2VuZGluZyBqdXN0IHRoZSBjaGlwIGFkZHJlc3MKKwkgKiBhbmQgbG9va2luZyBmb3IgYW4gPEFDSz4gYmFjay4KKwkgKi8KKwl1ZGVsYXkoMTAwMDApOworCXJldHVybiBpMmNfcmVhZCAoY2hpcCwgMCwgMSwgKGNoYXIgKikmdG1wLCAxKTsKK30KKwordWNoYXIgaTJjX3JlZ19yZWFkICh1Y2hhciBpMmNfYWRkciwgdWNoYXIgcmVnKQoreworCWNoYXIgYnVmWzFdOworCisJaTJjX3JlYWQgKGkyY19hZGRyLCByZWcsIDEsIGJ1ZiwgMSk7CisKKwlyZXR1cm4gKGJ1ZlswXSk7Cit9CisKK3ZvaWQgaTJjX3JlZ193cml0ZSAodWNoYXIgaTJjX2FkZHIsIHVjaGFyIHJlZywgdWNoYXIgdmFsKQoreworCWkyY193cml0ZSAoaTJjX2FkZHIsIHJlZywgMSwgJnZhbCwgMSk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSEFSRF9JMkMgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L2ludGVycnVwdHMuYyBiL2NwdS9tcGM4M3h4L2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQ3NGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvaW50ZXJydXB0cy5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIENoYW5nZSBsb2c6CisgKgorICogSGFja2VkIGZvciBNUEM4MjYwIGJ5IE11cnJheS5KZW5zZW5AY21zdC5jc2lyby5hdSwgMjItT2N0LTAwCisgKgorICogMjAwNTAxMDE6IEVyYW4gTGliZXJ0eSAobGliZXJ0eUBmcmVlc2NhbGUuY29tKQorICogICAgICAgICAgIEluaXRpYWwgZmlsZSBjcmVhdGluZyAocG9ydGluZyBmcm9tIDg1WFggJiA4MjYwKQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8bXBjODN4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworc3RydWN0IGlycV9hY3Rpb24geworCWludGVycnVwdF9oYW5kbGVyX3QgKmhhbmRsZXI7CisJdm9pZCAqYXJnOworCXVsb25nIGNvdW50OworfTsKKworaW50IGludGVycnVwdF9pbml0X2NwdSAodW5zaWduZWQgKmRlY3JlbWVudGVyX2NvdW50KQoreworCXJldHVybiAwOworfQorCisKKy8qCisgKiBIYW5kbGUgZXh0ZXJuYWwgaW50ZXJydXB0cworICovCisKK3ZvaWQgZXh0ZXJuYWxfaW50ZXJydXB0IChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKK30KKworCisvKgorICogSW5zdGFsbCBhbmQgZnJlZSBhbiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworCit2b2lkCitpcnFfaW5zdGFsbF9oYW5kbGVyIChpbnQgaXJxLCBpbnRlcnJ1cHRfaGFuZGxlcl90ICogaGFuZGxlciwgdm9pZCAqYXJnKQoreworfQorCisKK3ZvaWQgaXJxX2ZyZWVfaGFuZGxlciAoaW50IGlycSkKK3sKK30KKworCit2b2lkIHRpbWVyX2ludGVycnVwdF9jcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCXJldHVybjsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSVJRKQorCisvKiByaXBwZWQgdGhpcyBvdXQgb2YgcHBjNHh4L2ludGVycnVwdHMuYyAqLworCisvKgorICogaXJxaW5mbyAtIHByaW50IGluZm9ybWF0aW9uIGFib3V0IFBDSSBkZXZpY2VzCisgKi8KKwordm9pZAorZG9faXJxaW5mbyhjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7Cit9CisKKyNlbmRpZgkJLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JUlEgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L3BjaS5jIGIvY3B1L21wYzgzeHgvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmYTgxMQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4M3h4L3BjaS5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbyAoeC54aWFvQG1vdG9yb2xhLmNvbSkKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBDaGFuZ2UgbG9nOgorICoKKyAqIDIwMDUwMTAxOiBFcmFuIExpYmVydHkgKGxpYmVydHlAZnJlZXNjYWxlLmNvbSkKKyAqICAgICAgICAgICBJbml0aWFsIGZpbGUgY3JlYXRpbmcgKHBvcnRpbmcgZnJvbSA4NVhYICYgODI2MCkKKyAqLworCisvKgorICogUENJIENvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzIHN1cHBvcnQgZm9yIE1QQzg1eHggUENJIEJyaWRnZQorICovCisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorCisjaWZkZWYgQ09ORklHX01QQzgzNDlBRFMKKyNpbmNsdWRlIDxhc20vaTJjLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKwordm9pZAorcGNpX21wYzgzeHhfaW5pdCh2b2xhdGlsZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqCWltbXI7CisJdm9sYXRpbGUgY2xrODM0OV90ICoJY2xrOworCXZvbGF0aWxlIGxhdzgzNDlfdCAqCXBjaV9sYXc7CisJdm9sYXRpbGUgcG90ODM0OV90ICoJcGNpX3BvdDsKKwl2b2xhdGlsZSBwY2ljdHJsODM0OV90ICoJcGNpX2N0cmw7CisJdm9sYXRpbGUgcGNpY29uZjgzNDlfdCAqCXBjaV9jb25mOworCisJdTggdmFsOCx0bXA4LHJldDsKKwl1MTYgcmVnMTYsdG1wMTY7CisJdTMyIHZhbDMyLHRtcDMyOworCisJaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVJCQVI7CisJY2xrID0gKGNsazgzNDlfdCAqKSZpbW1yLT5jbGs7CisJcGNpX2xhdyA9IGltbXItPnN5c2NvbmYucGNpbGF3OworCXBjaV9wb3QgPSBpbW1yLT5pb3MucG90OworCXBjaV9jdHJsID0gaW1tci0+cGNpX2N0cmw7CisJcGNpX2NvbmYgPSBpbW1yLT5wY2lfY29uZjsKKworCS8qCisJICogQ29uZmlndXJlIFBDSSBjb250cm9sbGVyIGFuZCBQQ0lfQ0xLX09VVFBVVCBib3RoIGluIDY2TSBtb2RlCisJICovCisJdmFsMzIgPSBjbGstPm9jY3I7CisJdWRlbGF5KDIwMDApOworCWNsay0+b2NjciA9IDB4ZmYwMDAwMDA7CisJdWRlbGF5KDIwMDApOworCisJLyoKKwkgKiBDb25maWd1cmUgUENJIExvY2FsIEFjY2VzcyBXaW5kb3dzCisJICovCisJcGNpX2xhd1swXS5iYXIgPSBDRkdfUENJMV9NRU1fUEhZUyAmIExBV0JBUl9CQVI7CisJcGNpX2xhd1swXS5hciA9IExBV0FSX0VOIHwgTEFXQVJfU0laRV8xRzsKKwlwY2lfbGF3WzFdLmJhciA9IENGR19QQ0kxX0lPX1BIWVMgJiBMQVdCQVJfQkFSOworCXBjaV9sYXdbMV0uYXIgPSBMQVdBUl9FTiB8IExBV0FSX1NJWkVfMzJNOworCisJLyoKKwkgKiBDb25maWd1cmUgUENJIE91dGJvdW5kIFRyYW5zbGF0aW9uIFdpbmRvd3MKKwkgKi8KKwlwY2lfcG90WzBdLnBvdGFyID0gKENGR19QQ0kxX01FTV9CQVNFID4+IDEyKSAmIFBPVEFSX1RBX01BU0s7CisJcGNpX3BvdFswXS5wb2JhciA9IChDRkdfUENJMV9NRU1fUEhZUyA+PiAxMikgJiBQT0JBUl9CQV9NQVNLOworCXBjaV9wb3RbMF0ucG9jbXIgPSBQT0NNUl9FTiB8IChQT0NNUl9DTV81MTJNICYgUE9DTVJfQ01fTUFTSyk7CisKKwkvKiBtYXBwZWQgdG8gUENJMSBJTyBzcGFjZSAweDAgdG8gbG9jYWwgMHhlMjAwMDAwMCAgKi8KKwlwY2lfcG90WzFdLnBvdGFyID0gKENGR19QQ0kxX0lPX0JBU0UgPj4gMTIpICYgUE9UQVJfVEFfTUFTSzsKKwlwY2lfcG90WzFdLnBvYmFyID0gKENGR19QQ0kxX0lPX1BIWVMgPj4gMTIpICYgUE9CQVJfQkFfTUFTSzsKKwlwY2lfcG90WzFdLnBvY21yID0gUE9DTVJfRU4gfCBQT0NNUl9JTyB8IChQT0NNUl9DTV8xNk0gJiBQT0NNUl9DTV9NQVNLKTsKKworCXBjaV9wb3RbM10ucG90YXIgPSAoQ0ZHX1BDSTJfTUVNX0JBU0UgPj4gMTIpICYgUE9UQVJfVEFfTUFTSzsKKwlwY2lfcG90WzNdLnBvYmFyID0gKENGR19QQ0kyX01FTV9QSFlTID4+IDEyKSAmIFBPQkFSX0JBX01BU0s7CisJcGNpX3BvdFszXS5wb2NtciA9IFBPQ01SX0VOIHwgUE9DTVJfRFNUIHwgKFBPQ01SX0NNXzUxMk0gJiBQT0NNUl9DTV9NQVNLKTsKKworCS8qIG1hcHBlZCB0byBQQ0kyIElPIHNwYWNlIDB4MCB0byBsb2NhbCAweGUzMDAwMDAwICAqLworCXBjaV9wb3RbNF0ucG90YXIgPSAoQ0ZHX1BDSTJfSU9fQkFTRSA+PiAxMikgJiBQT1RBUl9UQV9NQVNLOworCXBjaV9wb3RbNF0ucG9iYXIgPSAoQ0ZHX1BDSTJfSU9fUEhZUyA+PiAxMikgJiBQT0JBUl9CQV9NQVNLOworCXBjaV9wb3RbNF0ucG9jbXIgPSBQT0NNUl9FTiB8IFBPQ01SX0RTVCB8IFBPQ01SX0lPIHwgKFBPQ01SX0NNXzE2TSAmIFBPQ01SX0NNX01BU0spOworCisJLyoKKwkgKiBDb25maWd1cmUgUENJIEluYm91bmQgVHJhbnNsYXRpb24gV2luZG93cworCSAqLworCXBjaV9jdHJsWzBdLnBpdGFyMSA9IDB4MDsKKwlwY2lfY3RybFswXS5waWJhcjEgPSAweDA7CisJcGNpX2N0cmxbMF0ucGllYmFyMSA9IDB4MDsKKwlwY2lfY3RybFswXS5waXdhcjEgPSBQSVdBUl9FTiB8IFBJV0FSX1BGIHwgUElXQVJfUlRUX1NOT09QIHwgUElXQVJfV1RUX1NOT09QIHwgUElXQVJfSVdTXzJHOworCisJcGNpX2N0cmxbMV0ucGl0YXIxID0gMHgwOworCXBjaV9jdHJsWzFdLnBpYmFyMSA9IDB4MDsKKwlwY2lfY3RybFsxXS5waWViYXIxID0gMHgwOworCXBjaV9jdHJsWzFdLnBpd2FyMSA9IFBJV0FSX0VOIHwgUElXQVJfUEYgfCBQSVdBUl9SVFRfU05PT1AgfCBQSVdBUl9XVFRfU05PT1AgfCBQSVdBUl9JV1NfMkc7CisJLyoKKwkgKiBBc3NpZ24gUElCIFBNQyBzbG90IHRvIGRlc2lyZWQgUENJIGJ1cworCSAqLworI2lmZGVmIENPTkZJR19NUEM4MzQ5QURTCisJbXBjODM0OV9pMmMgPSAoaTJjX3QqKShDRkdfSU1NUkJBUiArIENGR19JMkMyX09GRlNFVCk7CisJaTJjX2luaXQoQ0ZHX0kyQ19TUEVFRCxDRkdfSTJDX1NMQVZFKTsKKyNlbmRpZgorCXZhbDggPSAwOworCXJldCA9IGkyY193cml0ZSgweDIzLDB4NiwxLCZ2YWw4LDEpOworCXJldCA9IGkyY193cml0ZSgweDIzLDB4NywxLCZ2YWw4LDEpOworCXZhbDggPSAweGZmOworCXJldCA9IGkyY193cml0ZSgweDIzLDB4MiwxLCZ2YWw4LDEpOworCXJldCA9IGkyY193cml0ZSgweDIzLDB4MywxLCZ2YWw4LDEpOworCisJdmFsOCA9IDA7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjYsMHg2LDEsJnZhbDgsMSk7CisJdmFsOCA9IDB4MzQ7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjYsMHg3LDEsJnZhbDgsMSk7CisjaWYgZGVmaW5lZChQQ0lfNjRCSVQpCisJdmFsOCA9IDB4ZjQ7CS8qIFBNQzI8LT5QQ0kxICA2NGJpdCAqLworI2VsaWYgZGVmaW5lZChQQ0lfQUxMX1BDSTEpCisJdmFsOCA9IDB4ZjM7CS8qIFBNQzE8LT5QQ0kxLFBNQzI8LT5QQ0kxLFBNQzM8LT5QQ0kxICAzMmJpdCAqLworI2VsaWYgZGVmaW5lZChQQ0lfT05FX1BDSTEpCisJdmFsOCA9IDB4Zjk7CS8qIFBNQzE8LT5QQ0kxLFBNQzI8LT5QQ0kyLFBNQzM8LT5QQ0kyICAzMmJpdCAqLworI2VsaWYgZGVmaW5lZChQQ0lfVFdPX1BDSTEpCisJdmFsOCA9IDB4ZjU7CS8qIFBNQzE8LT5QQ0kxLFBNQzI8LT5QQ0kxLFBNQzM8LT5QQ0kyIDMyYml0ICovCisjZWxzZQorCXZhbDggPSAweGY1OworI2VuZGlmCisJcmV0ID0gaTJjX3dyaXRlKDB4MjYsMHgyLDEsJnZhbDgsMSk7CisJdmFsOCA9IDB4ZmY7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjYsMHgzLDEsJnZhbDgsMSk7CisJdmFsOCA9IDA7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjcsMHg2LDEsJnZhbDgsMSk7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjcsMHg3LDEsJnZhbDgsMSk7CisJdmFsOCA9IDB4ZmY7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjcsMHgyLDEsJnZhbDgsMSk7CisJdmFsOCA9IDB4ZWY7CisJcmV0ID0gaTJjX3dyaXRlKDB4MjcsMHgzLDEsJnZhbDgsMSk7CisJYXNtKCJlaWVpbyIpOworCisJLyoKKwkgKiBSZWxlYXNlIFBDSSBSU1QgT3V0cHV0IHNpZ25hbAorCSAqLworCXVkZWxheSgyMDAwKTsKKwlwY2lfY3RybFswXS5nY3IgPSAxOworI2lmbmRlZiBQQ0lfNjRCSVQKKwlwY2lfY3RybFsxXS5nY3IgPSAxOworI2VuZGlmCisJdWRlbGF5KDIwMDApOworCisJaG9zZVswXS5maXJzdF9idXNubyA9IDA7CisJaG9zZVswXS5sYXN0X2J1c25vID0gMHhmZjsKKworCXBjaV9zZXRfcmVnaW9uKGhvc2VbMF0ucmVnaW9ucyArIDAsCisJCSAgICAgICBDRkdfUENJMV9NRU1fQkFTRSwKKwkJICAgICAgIENGR19QQ0kxX01FTV9QSFlTLAorCQkgICAgICAgQ0ZHX1BDSTFfTUVNX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CisKKwlwY2lfc2V0X3JlZ2lvbihob3NlWzBdLnJlZ2lvbnMgKyAxLAorCQkgICAgICAgQ0ZHX1BDSTFfSU9fQkFTRSwKKwkJICAgICAgIENGR19QQ0kxX0lPX1BIWVMsCisJCSAgICAgICBDRkdfUENJMV9JT19TSVpFLAorCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CisKKwlob3NlWzBdLnJlZ2lvbl9jb3VudCA9IDI7CisKKwlwY2lfc2V0dXBfaW5kaXJlY3QoJmhvc2VbMF0sCisJCQkgICAoQ0ZHX0lNTVJCQVIrMHg4MzAwKSwKKwkJCSAgIChDRkdfSU1NUkJBUisweDgzMDQpKTsKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRQkweDA2CisJcmVnMTYgPSAweGZmOworCXRtcDMyID0gMHhmZmZmOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKCZob3NlWzBdLFBDSV9CREYoMCwwLDApLFBDSV9DTEFTU19DT0RFLFBDSV9DTEFTU19CUklER0UpOworCisJcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZCAoJmhvc2VbMF0sUENJX0JERigwLDAsMCksUENJX0NPTU1BTkQsICZyZWcxNik7CisJcmVnMTYgfD0gUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWTsKKwlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZCgmaG9zZVswXSxQQ0lfQkRGKDAsMCwwKSwgUENJX0NPTU1BTkQsIHJlZzE2KTsKKworCS8qCisJICogQ2xlYXIgbm9uLXJlc2VydmVkIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyLgorCSAqLworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKCZob3NlWzBdLFBDSV9CREYoMCwwLDApLCBQQ0lfU1RBVFVTLCAweGZmZmYpOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKCZob3NlWzBdLFBDSV9CREYoMCwwLDApLCBQQ0lfTEFURU5DWV9USU1FUiwweDgwKTsKKyNpZm5kZWYgUENJXzY0QklUCisJaG9zZVsxXS5maXJzdF9idXNubyA9IDA7CisJaG9zZVsxXS5sYXN0X2J1c25vID0gMHhmZjsKKworCXBjaV9zZXRfcmVnaW9uKGhvc2VbMV0ucmVnaW9ucyArIDAsCisJCSAgICAgICBDRkdfUENJMl9NRU1fQkFTRSwKKwkJICAgICAgIENGR19QQ0kyX01FTV9QSFlTLAorCQkgICAgICAgQ0ZHX1BDSTJfTUVNX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CisKKwlwY2lfc2V0X3JlZ2lvbihob3NlWzFdLnJlZ2lvbnMgKyAxLAorCQkgICAgICAgQ0ZHX1BDSTJfSU9fQkFTRSwKKwkJICAgICAgIENGR19QQ0kyX0lPX1BIWVMsCisJCSAgICAgICBDRkdfUENJMl9JT19TSVpFLAorCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CisKKwlob3NlWzFdLnJlZ2lvbl9jb3VudCA9IDI7CisKKwlwY2lfc2V0dXBfaW5kaXJlY3QoJmhvc2VbMV0sCisJCQkgICAoQ0ZHX0lNTVJCQVIrMHg4MzgwKSwKKwkJCSAgIChDRkdfSU1NUkJBUisweDgzODQpKTsKKworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKCZob3NlWzFdLFBDSV9CREYoMCwwLDApLFBDSV9DTEFTU19DT0RFLFBDSV9DTEFTU19CUklER0UpOworCXBjaV9ob3NlX3JlYWRfY29uZmlnX3dvcmQgKCZob3NlWzFdLFBDSV9CREYoMCwwLDApLCBQQ0lfQ09NTUFORCwgJnJlZzE2KTsKKwlyZWcxNiB8PSBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKCZob3NlWzFdLFBDSV9CREYoMCwwLDApLCBQQ0lfQ09NTUFORCwgcmVnMTYpOworCisJLyoKKwkgKiBDbGVhciBub24tcmVzZXJ2ZWQgYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIuCisJICovCisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoJmhvc2VbMV0sUENJX0JERigwLDAsMCksIFBDSV9TVEFUVVMsIDB4ZmZmZik7CisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoJmhvc2VbMV0sUENJX0JERigwLDAsMCksIFBDSV9MQVRFTkNZX1RJTUVSLDB4ODApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBDSV82NEJJVCkKKwlwcmludGYoIlBDSTEgNjRiaXQgb24gUE1DMlxuIik7CisjZWxpZiBkZWZpbmVkKFBDSV9BTExfUENJMSkKKwlwcmludGYoIlBDSTEgMzJiaXQgb24gUE1DMSAmIFBNQzIgJiBQTUMzXG4iKTsKKyNlbGlmIGRlZmluZWQoUENJX09ORV9QQ0kxKQorCXByaW50ZigiUENJMSAzMmJpdCBvbiBQTUMxLFBDSTIgMzJiaXQgb24gUE1DMiAmIFBNQzNcbiIpOworI2Vsc2UKKwlwcmludGYoIlBDSTEgMzJiaXQgb24gUE1DMSAmIFBNQzIgJiBQTUMzIGluIGRlZmF1bHRcbiIpOworI2VuZGlmCisKKyNpZiAxCisJLyoKKwkgKiBIb3NlIHNjYW4uCisJICovCisJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7CisJaG9zZS0+bGFzdF9idXNubyA9IHBjaV9ob3NlX3NjYW4oaG9zZSk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L3Jlc2V0dmVjLlMgYi9jcHUvbXBjODN4eC9yZXNldHZlYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmNkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODN4eC9yZXNldHZlYy5TCkBAIC0wLDAgKzEsNiBAQAorCS5zZWN0aW9uIC5yZXNldHZlYywiYXgiCisjaWZuZGVmIEZJWE1FCisjaWYgMAorCWIgX3N0YXJ0X2U1MDAKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9zcGRfc2RyYW0uYyBiL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGNkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODN4eC9zcGRfc2RyYW0uYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogKEMpIENvcHlyaWdodCAyMDAzIE1vdG9yb2xhIEluYy4KKyAqIFhpYW5naHVhIFhpYW8gKFguWGlhb0Btb3Rvcm9sYS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogQ2hhbmdlIGxvZzoKKyAqCisgKiAyMDA1MDEwMTogRXJhbiBMaWJlcnR5IChsaWJlcnR5QGZyZWVzY2FsZS5jb20pCisgKiAgICAgICAgICAgSW5pdGlhbCBmaWxlIGNyZWF0aW5nIChwb3J0aW5nIGZyb20gODVYWCAmIDgyNjApCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxzcGQuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8c3BkX3NkcmFtLmg+CisKKyNpZmRlZiBDT05GSUdfU1BEX0VFUFJPTQorCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKK2V4dGVybiB2b2lkIGRtYV9pbml0KHZvaWQpOworZXh0ZXJuIHVpbnQgZG1hX2NoZWNrKHZvaWQpOworZXh0ZXJuIGludCBkbWFfeGZlcih2b2lkICpkZXN0LCB1aW50IGNvdW50LCB2b2lkICpzcmMpOworI2VuZGlmCisKKyNpZm5kZWYJQ0ZHX1JFQURfU1BECisjZGVmaW5lIENGR19SRUFEX1NQRAlpMmNfcmVhZAorI2VuZGlmCisKKy8qCisgKiBDb252ZXJ0IHBpY29zZWNvbmRzIGludG8gY2xvY2sgY3ljbGVzIChyb3VuZGluZyB1cCBpZiBuZWVkZWQpLgorICovCisKK2ludAorcGljb3NfdG9fY2xrKGludCBwaWNvcykKK3sKKwlpbnQgY2xrczsKKworCWNsa3MgPSBwaWNvcyAvICgyMDAwMDAwMDAwIC8gKGdldF9idXNfZnJlcSgwKSAvIDEwMDApKTsKKwlpZiAocGljb3MgJSAoMjAwMDAwMDAwMCAvIChnZXRfYnVzX2ZyZXEoMCkgLyAxMDAwKSkgIT0gMCkgeworCWNsa3MrKzsKKwl9CisKKwlyZXR1cm4gY2xrczsKK30KKwordW5zaWduZWQgaW50CitiYW5rc2l6ZSh1bnNpZ25lZCBjaGFyIHJvd19kZW5zKQoreworCXJldHVybiAoKHJvd19kZW5zID4+IDIpIHwgKChyb3dfZGVucyAmIDMpIDw8IDYpKSA8PCAyNDsKK30KKworbG9uZyBpbnQgc3BkX3NkcmFtKGludChyZWFkX3NwZCkodWludCBhZGRyKSkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVJCQVI7CisJdm9sYXRpbGUgZGRyODM0OV90ICpkZHIgPSAmaW1tYXAtPmRkcjsKKwl2b2xhdGlsZSBsYXc4MzQ5X3QgKmVjbSA9ICZpbW1hcC0+c3lzY29uZi5kZHJsYXdbMF07CisJc3BkX2VlcHJvbV90IHNwZDsKKwl1bnNpZ25lZCB0bXAsIHRtcDE7CisJdW5zaWduZWQgaW50IG1lbXNpemU7CisJdW5zaWduZWQgaW50IGxhd19zaXplOworCXVuc2lnbmVkIGNoYXIgY2FzbGF0OworCXVuc2lnbmVkIGludCB0cmZjLCB0cmZjX2NsaywgdHJmY19sb3c7CisKKyN3YXJuaW5nIEN1cnJlbnQgc3BkX3NkcmFtIGRvZXMgbm90IGZpdCBpdHMgdXNhZ2UuLi4gYWRqdXN0IGltcGxlbWVudGF0aW9uIG9yIEFQSS4uLgorCisJQ0ZHX1JFQURfU1BEKFNQRF9FRVBST01fQUREUkVTUywgMCwgMSwgKHVjaGFyICopICYgc3BkLCBzaXplb2YgKHNwZCkpOworCisJaWYgKHNwZC5ucm93cyA+IDIpIHsKKwkJcHV0cygiRERSOk9ubHkgdHdvIGNoaXAgc2VsZWN0cyBhcmUgc3VwcG9ydGVkIG9uIEFEUy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3BkLm5yb3dfYWRkciA8IDEyCisJICAgIHx8IHNwZC5ucm93X2FkZHIgPiAxNAorCSAgICB8fCBzcGQubmNvbF9hZGRyIDwgOAorCSAgICB8fCBzcGQubmNvbF9hZGRyID4gMTEpIHsKKwkJcHV0cygiRERSOlJvdyBvciBDb2wgbnVtYmVyIHVuc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKworCWRkci0+Y3NibmRzWzJdLmNzYm5kcyA9IChiYW5rc2l6ZShzcGQucm93X2RlbnMpID4+IDI0KSAtIDE7CisJZGRyLT5jc19jb25maWdbMl0gPSAoIDEgPDwgMzEKKwkJCSAgICB8IChzcGQubnJvd19hZGRyIC0gMTIpIDw8IDgKKwkJCSAgICB8IChzcGQubmNvbF9hZGRyIC0gOCkgKTsKKwlkZWJ1ZygiXG4iKTsKKwlkZWJ1ZygiY3MyX2JuZHMgPSAweCUwOHhcbiIsZGRyLT5jc2JuZHNbMl0uY3NibmRzKTsKKwlkZWJ1ZygiY3MyX2NvbmZpZyA9IDB4JTA4eFxuIixkZHItPmNzX2NvbmZpZ1syXSk7CisKKwlpZiAoc3BkLm5yb3dzID09IDIpIHsKKwkJZGRyLT5jc2JuZHNbM10uY3NibmRzID0gKCAoYmFua3NpemUoc3BkLnJvd19kZW5zKSA+PiA4KQorCQkJCSAgfCAoKGJhbmtzaXplKHNwZC5yb3dfZGVucykgPj4gMjMpIC0gMSkgKTsKKwkJZGRyLT5jc19jb25maWdbM10gPSAoIDE8PDMxCisJCQkJICAgIHwgKHNwZC5ucm93X2FkZHItMTIpIDw8IDgKKwkJCQkgICAgfCAoc3BkLm5jb2xfYWRkci04KSApOworCQlkZWJ1ZygiY3MzX2JuZHMgPSAweCUwOHhcbiIsZGRyLT5jc2JuZHNbM10uY3NibmRzKTsKKwkJZGVidWcoImNzM19jb25maWcgPSAweCUwOHhcbiIsZGRyLT5jc19jb25maWdbM10pOworCX0KKworCWlmIChzcGQubWVtX3R5cGUgIT0gMHgwNykgeworCQlwdXRzKCJObyBERFIgbW9kdWxlIGZvdW5kIVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRmlndXJlIG91dCBtZW1vcnkgc2l6ZSBpbiBNZWdhYnl0ZXMuCisJICovCisJbWVtc2l6ZSA9IHNwZC5ucm93cyAqIGJhbmtzaXplKHNwZC5yb3dfZGVucykgLyAweDEwMDAwMDsKKworCS8qCisJICogRmlyc3Qgc3VwcG9ydGVkIExBVyBzaXplIGlzIDE2TSwgYXQgTEFXQVJfU0laRV8xNk0gPT0gMjMuCisJICovCisJbGF3X3NpemUgPSAxOSArIF9faWxvZzIobWVtc2l6ZSk7CisKKwkvKgorCSAqIFNldCB1cCBMQVdCQVIgZm9yIGFsbCBvZiBERFIuCisJICovCisJZWNtLT5iYXIgPSAoKENGR19ERFJfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZik7CisJZWNtLT5hciAgPSAoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgbGF3X3NpemUpKTsKKwlkZWJ1ZygiRERSOmJhcj0weCUwOHhcbiIsIGVjbS0+YmFyKTsKKwlkZWJ1ZygiRERSOmFyPTB4JTA4eFxuIiwgZWNtLT5hcik7CisKKwkvKgorCSAqIGZpbmQgdGhlIGxhcmdlc3QgQ0FTCisJICovCisJaWYoc3BkLmNhc19sYXQgJiAweDQwKSB7CisJCWNhc2xhdCA9IDc7CisJfSBlbHNlIGlmIChzcGQuY2FzX2xhdCAmIDB4MjApIHsKKwkJY2FzbGF0ID0gNjsKKwl9IGVsc2UgaWYgKHNwZC5jYXNfbGF0ICYgMHgxMCkgeworCQljYXNsYXQgPSA1OworCX0gZWxzZSBpZiAoc3BkLmNhc19sYXQgJiAweDA4KSB7CisJCWNhc2xhdCA9IDQ7CisJfSBlbHNlIGlmIChzcGQuY2FzX2xhdCAmIDB4MDQpIHsKKwkJY2FzbGF0ID0gMzsKKwl9IGVsc2UgaWYgKHNwZC5jYXNfbGF0ICYgMHgwMikgeworCQljYXNsYXQgPSAyOworCX0gZWxzZSBpZiAoc3BkLmNhc19sYXQgJiAweDAxKSB7CisJCWNhc2xhdCA9IDE7CisJfSBlbHNlIHsKKwkJcHV0cygiRERSOm5vIHZhbGlkIENBUyBMYXRlbmN5IGluZm9ybWF0aW9uLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IDIwMDAwIC8gKCgoc3BkLmNsa19jeWNsZSAmIDB4RjApID4+IDQpICogMTAKKwkJICAgICAgICsgKHNwZC5jbGtfY3ljbGUgJiAweDBmKSk7CisJZGVidWcoIkREUjpNb2R1bGUgbWF4aW11bSBkYXRhIHJhdGUgaXM6ICVkTWh6XG4iLCB0bXApOworCisJdG1wMSA9IGdldF9idXNfZnJlcSgwKSAvIDEwMDAwMDA7CisJaWYgKHRtcDEgPCAyMzAgJiYgdG1wMSA+PSA5MCAmJiB0bXAgPj0gMjMwKSB7CisJCS8qIDkwfjIzMCByYW5nZSwgdHJlYXRlZCBhcyBERFIgMjAwICovCisJCWlmIChzcGQuY2xrX2N5Y2xlMyA9PSAweGEwKQorCQkJY2FzbGF0IC09IDI7CisJCWVsc2UgaWYoc3BkLmNsa19jeWNsZTIgPT0gMHhhMCkKKwkJCWNhc2xhdC0tOworCX0gZWxzZSBpZiAodG1wMSA8IDI4MCAmJiB0bXAxID49IDIzMCAmJiB0bXAgPj0gMjgwKSB7CisJCS8qIDIzMC0yODAgcmFuZ2UsIHRyZWF0ZWQgYXMgRERSIDI2NiAqLworCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHg3NSkKKwkJCWNhc2xhdCAtPSAyOworCQllbHNlIGlmIChzcGQuY2xrX2N5Y2xlMiA9PSAweDc1KQorCQkJY2FzbGF0LS07CisJfSBlbHNlIGlmICh0bXAxIDwgMzUwICYmIHRtcDEgPj0gMjgwICYmIHRtcCA+PSAzNTApIHsKKwkJLyogMjgwfjM1MCByYW5nZSwgdHJlYXRlZCBhcyBERFIgMzMzICovCisJCWlmIChzcGQuY2xrX2N5Y2xlMyA9PSAweDYwKQorCQkJY2FzbGF0IC09IDI7CisJCWVsc2UgaWYgKHNwZC5jbGtfY3ljbGUyID09IDB4NjApCisJCQljYXNsYXQtLTsKKwl9IGVsc2UgaWYgKHRtcDEgPCA5MCB8fCB0bXAxID49IDM1MCkgeworCQkvKiBERFIgcmF0ZSBvdXQtb2YtcmFuZ2UgKi8KKwkJcHV0cygiRERSOnBsYXRmb3JtIGZyZXF1ZW5jeSBpcyBub3QgZml0IGZvciBERFIgcmF0ZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogbm90ZTogY2FzbGF0IG11c3QgYWxzbyBiZSBwcm9ncmFtbWVkIGludG8gZGRyLT5zZHJhbV9tb2RlCisJICogcmVnaXN0ZXIuCisJICoKKwkgKiBub3RlOiBXUlJFQyhUd3IpIGFuZCBXUlRPUkQoVHd0cikgYXJlIG5vdCBpbiBTUEQsCisJICogdXNlIGNvbnNlcnZhdGl2ZSB2YWx1ZSBoZXJlLgorCSAqLworCXRyZmMgPSBzcGQudHJmYyAqIDEwMDA7ICAgICAgICAgLyogdXAgdG8gcHMgKi8KKwl0cmZjX2NsayA9IHBpY29zX3RvX2Nsayh0cmZjKTsKKwl0cmZjX2xvdyA9ICh0cmZjX2NsayAtIDgpICYgMHhmOworCisJZGRyLT50aW1pbmdfY2ZnXzEgPQorCSAgICAoKChwaWNvc190b19jbGsoc3BkLnRycCAqIDI1MCkgJiAweDA3KSA8PCAyOCApIHwKKwkgICAgICgocGljb3NfdG9fY2xrKHNwZC50cmFzICogMTAwMCkgJiAweDBmICkgPDwgMjQgKSB8CisJICAgICAoKHBpY29zX3RvX2NsayhzcGQudHJjZCAqIDI1MCkgJiAweDA3KSA8PCAyMCApIHwKKwkgICAgICgoY2FzbGF0ICYgMHgwNykgPDwgMTYgKSB8CisJICAgICAodHJmY19sb3cgPDwgMTIgKSB8CisJICAgICAoIDB4MzAwICkgfAorCSAgICAgKChwaWNvc190b19jbGsoc3BkLnRycmQgKiAyNTApICYgMHgwNykgPDwgNCkgfCAxKTsKKworCWRkci0+dGltaW5nX2NmZ18yID0gMHgwMDAwMDgwMDsKKworCWRlYnVnKCJERFI6dGltaW5nX2NmZ18xPTB4JTA4eFxuIiwgZGRyLT50aW1pbmdfY2ZnXzEpOworCWRlYnVnKCJERFI6dGltaW5nX2NmZ18yPTB4JTA4eFxuIiwgZGRyLT50aW1pbmdfY2ZnXzIpOworCisJLyoKKwkgKiBPbmx5IEREUiBJIGlzIHN1cHBvcnRlZAorCSAqIEREUiBJIGFuZCBJSSBoYXZlIGRpZmZlcmVudCBtb2RlLXJlZ2lzdGVyLXNldCBkZWZpbml0aW9uCisJICovCisKKwkvKiBidXJzdCBsZW5ndGggaXMgYWx3YXlzIDQgKi8KKwlzd2l0Y2goY2FzbGF0KSB7CisJY2FzZSAyOgorCQlkZHItPnNkcmFtX21vZGUgPSAweDUyOyAvKiAxLjUgKi8KKwkJYnJlYWs7CisJY2FzZSAzOgorCQlkZHItPnNkcmFtX21vZGUgPSAweDIyOyAvKiAyLjAgKi8KKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZHItPnNkcmFtX21vZGUgPSAweDYyOyAvKiAyLjUgKi8KKwkJYnJlYWs7CisJY2FzZSA1OgorCQlkZHItPnNkcmFtX21vZGUgPSAweDMyOyAvKiAzLjAgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHV0cygiRERSOm9ubHkgQ0FTIExhdGVuY3kgMS41LCAyLjAsIDIuNSwgMy4wIGlzIHN1cHBvcnRlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJZGVidWcoIkREUjpzZHJhbV9tb2RlPTB4JTA4eFxuIiwgZGRyLT5zZHJhbV9tb2RlKTsKKworCXN3aXRjaChzcGQucmVmcmVzaCkgeworCWNhc2UgMHgwMDoKKwljYXNlIDB4ODA6CisJCXRtcCA9IHBpY29zX3RvX2NsaygxNTYyNTAwMCk7CisJCWJyZWFrOworCWNhc2UgMHgwMToKKwljYXNlIDB4ODE6CisJCXRtcCA9IHBpY29zX3RvX2NsaygzOTAwMDAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCWNhc2UgMHg4MjoKKwkJdG1wID0gcGljb3NfdG9fY2xrKDc4MDAwMDApOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJY2FzZSAweDgzOgorCQl0bXAgPSBwaWNvc190b19jbGsoMzEzMDAwMDApOworCQlicmVhazsKKwljYXNlIDB4MDQ6CisJY2FzZSAweDg0OgorCQl0bXAgPSBwaWNvc190b19jbGsoNjI1MDAwMDApOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJY2FzZSAweDg1OgorCQl0bXAgPSBwaWNvc190b19jbGsoMTI1MDAwMDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdG1wID0gMHg1MTI7CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IEJTVE9QUkUgdG8gMHgxMDAgZm9yIHBhZ2UgbW9kZQorCSAqIElmIGF1dG8tY2hhcmdlIGlzIHVzZWQsIHNldCBCU1RPUFJFID0gMAorCSAqLworCWRkci0+c2RyYW1faW50ZXJ2YWwgPSAoKHRtcCAmIDB4M2ZmZikgPDwgMTYpIHwgMHgxMDA7CisJZGVidWcoIkREUjpzZHJhbV9pbnRlcnZhbD0weCUwOHhcbiIsIGRkci0+c2RyYW1faW50ZXJ2YWwpOworCisJLyoKKwkgKiBJcyB0aGlzIGFuIEVDQyBERFIgY2hpcD8KKwkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKQorCWlmIChzcGQuY29uZmlnID09IDB4MDIpIHsKKwkJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMGQ7CisJCWRkci0+ZXJyX3NiZSA9IDB4MDBmZjAwMDA7CisJfQorCWRlYnVnKCJERFI6ZXJyX2Rpc2FibGU9MHglMDh4XG4iLCBkZHItPmVycl9kaXNhYmxlKTsKKwlkZWJ1ZygiRERSOmVycl9zYmU9MHglMDh4XG4iLCBkZHItPmVycl9zYmUpOworI2VuZGlmCisJYXNtKCJzeW5jO2lzeW5jIik7CisKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJICogU1NfRU49MSwKKwkgKiBDTEtfQURKU1QgPSAyLU1DSy9NQ0tfQiwgaXMgbGF1Y2hlZCAxLzIgb2Ygb25lIFNEUkFNCisJICogY2xvY2sgY3ljbGUgYWZ0ZXIgYWRkcmVzcy9jb21tYW5kCisJICovCisJZGRyLT5zZHJhbV9jbGtfY250bCA9IDB4ODIwMDAwMDA7CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgdGhlIHNldHRpbmdzIGZvciB0aGUgc2RyYW1fY2ZnIHJlZ2lzdGVyLiAgQnVpbGQgdXAKKwkgKiB0aGUgZW50aXJlIHJlZ2lzdGVyIGluICd0bXAnIGJlZm9yZSB3cml0aW5nIHNpbmNlIHRoZSB3cml0ZSBpbnRvCisJICogdGhlIHJlZ2lzdGVyIHdpbGwgYWN0dWFsbHkgZW5hYmxlIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIGFsbAorCSAqIHNldHRpbmdzIG11c3QgYmUgZG9uZSBiZWZvcmUgZW5hYmxpbmcuCisJICoKKwkgKiBzZHJhbV9jZmdbMF0gICA9IDEgKGRkciBzZHJhbSBsb2dpYyBlbmFibGUpCisJICogc2RyYW1fY2ZnWzFdICAgPSAxIChzZWxmLXJlZnJlc2gtZW5hYmxlKQorCSAqIHNkcmFtX2NmZ1s2OjddID0gMiAoU0RSQU0gdHlwZSA9IEREUiBTRFJBTSkKKwkgKi8KKwl0bXAgPSAweGMyMDAwMDAwOworCisJLyoKKwkgKiBzZHJhbV9jZmdbM10gPSBSRF9FTiAtIHJlZ2lzdGVyZWQgRElNTSBlbmFibGUKKwkgKiAgIEEgdmFsdWUgb2YgMHgyNiBpbmRpY2F0ZXMgbWljcm9uIHJlZ2lzdGVyZWQgRElNTVMgKG1pY3Jvbi5jb20pCisJICovCisJaWYgKHNwZC5tb2RfYXR0ciA9PSAweDI2KSB7CisJCXRtcCB8PSAweDEwMDAwMDAwOworCX0KKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisJLyoKKwkgKiBJZiB0aGUgdXNlciB3YW50ZWQgRUNDIChlbmFibGVkIHZpYSBzZHJhbV9jZmdbMl0pCisJICovCisJaWYgKHNwZC5jb25maWcgPT0gMHgwMikgeworCQl0bXAgfD0gMHgyMDAwMDAwMDsKKwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl8yVF9USU1JTkcpCisJLyoKKwkgKiBFbmFibGUgMlQgdGltaW5nIGJ5IHNldHRpbmcgc2RyYW1fY2ZnWzE2XS4KKwkgKi8KKwl0bXAgfD0gU0RSQU1fQ0ZHXzJUX0VOOworI2VuZGlmCisKKwlkZHItPnNkcmFtX2NmZyA9IHRtcDsKKwlhc20oInN5bmM7aXN5bmMiKTsKKwl1ZGVsYXkoNTAwKTsKKworCWRlYnVnKCJERFI6c2RyYW1fY2ZnPTB4JTA4eFxuIiwgZGRyLT5zZHJhbV9jZmcpOworCisJcmV0dXJuIG1lbXNpemU7LyppbiBNQnl0ZXMqLworfQorI2VuZGlmIC8qIENPTkZJR19TUERfRUVQUk9NICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisvKgorICogSW5pdGlhbGl6ZSBhbGwgb2YgbWVtb3J5IGZvciBFQ0MsIHRoZW4gZW5hYmxlIGVycm9ycy4KKyAqLworCit2b2lkCitkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKQoreworI2lmbmRlZiBGSVhNRQorCXVpbnQgKnAgPSAwOworCXVpbnQgaSA9IDA7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SQkFSOworCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gJmltbWFwLT5pbV9kZHI7CisKKwlkbWFfaW5pdCgpOworCisJZm9yICgqcCA9IDA7IHAgPCAodWludCAqKSg4ICogMTAyNCk7IHArKykgeworCQlpZiAoKCh1bnNpZ25lZCBpbnQpcCAmIDB4MWYpID09IDApIHsKKwkJCXBwY0RjYnooKHVuc2lnbmVkIGxvbmcpIHApOworCQl9CisJCSpwID0gKHVuc2lnbmVkIGludCkweGRlYWRiZWVmOworCQlpZiAoKCh1bnNpZ25lZCBpbnQpcCAmIDB4MWMpID09IDB4MWMpIHsKKwkJCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpIHApOworCQl9CisJfQorCisJLyogOEsgKi8KKwlkbWFfeGZlcigodWludCAqKTB4MjAwMCwgMHgyMDAwLCAodWludCAqKTApOworCS8qIDE2SyAqLworCWRtYV94ZmVyKCh1aW50ICopMHg0MDAwLCAweDQwMDAsICh1aW50ICopMCk7CisJLyogMzJLICovCisJZG1hX3hmZXIoKHVpbnQgKikweDgwMDAsIDB4ODAwMCwgKHVpbnQgKikwKTsKKwkvKiA2NEsgKi8KKwlkbWFfeGZlcigodWludCAqKTB4MTAwMDAsIDB4MTAwMDAsICh1aW50ICopMCk7CisJLyogMTI4ayAqLworCWRtYV94ZmVyKCh1aW50ICopMHgyMDAwMCwgMHgyMDAwMCwgKHVpbnQgKikwKTsKKwkvKiAyNTZrICovCisJZG1hX3hmZXIoKHVpbnQgKikweDQwMDAwLCAweDQwMDAwLCAodWludCAqKTApOworCS8qIDUxMmsgKi8KKwlkbWFfeGZlcigodWludCAqKTB4ODAwMDAsIDB4ODAwMDAsICh1aW50ICopMCk7CisJLyogMU0gKi8KKwlkbWFfeGZlcigodWludCAqKTB4MTAwMDAwLCAweDEwMDAwMCwgKHVpbnQgKikwKTsKKwkvKiAyTSAqLworCWRtYV94ZmVyKCh1aW50ICopMHgyMDAwMDAsIDB4MjAwMDAwLCAodWludCAqKTApOworCS8qIDRNICovCisJZG1hX3hmZXIoKHVpbnQgKikweDQwMDAwMCwgMHg0MDAwMDAsICh1aW50ICopMCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgZHJhbV9zaXplIC8gMHg4MDAwMDA7IGkrKykgeworCQlkbWFfeGZlcigodWludCAqKSgweDgwMDAwMCppKSwgMHg4MDAwMDAsICh1aW50ICopMCk7CisJfQorCisJLyoKKwkgKiBFbmFibGUgZXJyb3JzIGZvciBFQ0MuCisJICovCisJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMDA7CisJYXNtKCJzeW5jO2lzeW5jIik7CisjZW5kaWYKK30KKworI2VuZGlmCS8qIENPTkZJR19ERFJfRUNDICovCmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9zcGVlZC5jIGIvY3B1L21wYzgzeHgvc3BlZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAxMzdkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvc3BlZWQuYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogQ2hhbmdlIGxvZzoKKyAqCisgKiAyMDA1MDEwMTogRXJhbiBMaWJlcnR5IChsaWJlcnR5QGZyZWVzY2FsZS5jb20pCisgKiAgICAgICAgICAgSW5pdGlhbCBmaWxlIGNyZWF0aW5nIChwb3J0aW5nIGZyb20gODVYWCAmIDgyNjApCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzgzeHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgZW51bSB7CisJX3VuaywKKwlfb2ZmLAorCV9ieXAsCisJX3g4LAorCV94NCwKKwlfeDIsCisJX3gxLAorCV8xeCwKKwlfMV81eCwKKwlfMngsCisJXzJfNXgsCisJXzN4Cit9IG11bHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCW11bHRfdCBjb3JlX2NzYl9yYXRpbzsKKwltdWx0X3QgIHZjb19kaXZpZGVyOworfSBjb3JlY25mX3Q7CisKK2NvcmVjbmZfdCBjb3JlY25mX3RhYltdID0geworCXsgX2J5cCwgX2J5cH0sCS8qIDB4MDAgKi8KKwl7IF9ieXAsIF9ieXB9LAkvKiAweDAxICovCisJeyBfYnlwLCBfYnlwfSwJLyogMHgwMiAqLworCXsgX2J5cCwgX2J5cH0sCS8qIDB4MDMgKi8KKwl7IF9ieXAsIF9ieXB9LAkvKiAweDA0ICovCisJeyBfYnlwLCBfYnlwfSwJLyogMHgwNSAqLworCXsgX2J5cCwgX2J5cH0sCS8qIDB4MDYgKi8KKwl7IF9ieXAsIF9ieXB9LAkvKiAweDA3ICovCisJeyAgXzF4LCAgX3gyfSwJLyogMHgwOCAqLworCXsgIF8xeCwgIF94NH0sCS8qIDB4MDkgKi8KKwl7ICBfMXgsICBfeDh9LAkvKiAweDBBICovCisJeyAgXzF4LCAgX3g4fSwJLyogMHgwQiAqLworCXtfMV81eCwgIF94Mn0sCS8qIDB4MEMgKi8KKwl7XzFfNXgsICBfeDR9LAkvKiAweDBEICovCisJe18xXzV4LCAgX3g4fSwJLyogMHgwRSAqLworCXtfMV81eCwgIF94OH0sCS8qIDB4MEYgKi8KKwl7ICBfMngsICBfeDJ9LAkvKiAweDEwICovCisJeyAgXzJ4LCAgX3g0fSwJLyogMHgxMSAqLworCXsgIF8yeCwgIF94OH0sCS8qIDB4MTIgKi8KKwl7ICBfMngsICBfeDh9LAkvKiAweDEzICovCisJe18yXzV4LCAgX3gyfSwJLyogMHgxNCAqLworCXtfMl81eCwgIF94NH0sCS8qIDB4MTUgKi8KKwl7XzJfNXgsICBfeDh9LAkvKiAweDE2ICovCisJe18yXzV4LCAgX3g4fSwJLyogMHgxNyAqLworCXsgIF8zeCwgIF94Mn0sCS8qIDB4MTggKi8KKwl7ICBfM3gsICBfeDR9LAkvKiAweDE5ICovCisJeyAgXzN4LCAgX3g4fSwJLyogMHgxQSAqLworCXsgIF8zeCwgIF94OH0sCS8qIDB4MUIgKi8KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKgorICovCitpbnQgZ2V0X2Nsb2NrcyAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVJCQVI7CisJdTMyIHBjaV9zeW5jX2luOworCXU4ICBzcG1mOworCXU4ICBjbGtpbl9kaXY7CisJdTMyIHNjY3I7CisJdTMyIGNvcmVjbmZfdGFiX2luZGV4OworCXU4ICBjb3JlcGxsOworCXUzMiBsY3JyOworCisJdTMyIGNzYl9jbGs7CisJdTMyIHRzZWMxX2NsazsKKwl1MzIgdHNlYzJfY2xrOworCXUzMiBjb3JlX2NsazsKKwl1MzIgdXNibXBoX2NsazsKKwl1MzIgdXNiZHJfY2xrOworCXUzMiBpMmNfY2xrOworCXUzMiBlbmNfY2xrOworCXUzMiBsYml1X2NsazsKKwl1MzIgbGNsa19jbGs7CisJdTMyIGRkcl9jbGs7CisKKwlpZiAoKGltLT5zeXNjb25mLmltbXJiYXIgJiBJTU1SQkFSX0JBU0VfQUREUikgIT0gKHUzMilpbSkKKwkJcmV0dXJuIC0xOworCisjaWZuZGVmIENGR19IUkNXX0hJR0gKKyMgZXJyb3IgIkNGR19IUkNXX0hJR0ggbXVzdCBiZSBkZWZpbmVkIGluIGluY2x1ZGUvY29uZmlncy9NQ1A4M1hYQURTLmgiCisjZW5kaWYgLyogQ0ZHX0hDV0RfSElHSCAqLworCisjaWYgKENGR19IUkNXX0hJR0ggJiBIUkNXSF9QQ0lfSE9TVCkKKyMgaWZuZGVmIENPTkZJR184M1hYX0NMS0lOCisjICBlcnJvciAiSW4gUENJIEhvc3QgTW9kZSwgQ09ORklHXzgzWFhfQ0xLSU4gbXVzdCBiZSBkZWZpbmVkIGluIGluY2x1ZGUvY29uZmlncy9NQ1A4M1hYQURTLmgiCisjIGVuZGlmIC8qIENPTkZJR184M1hYX0NMS0lOICovCisjIGlmZGVmIENPTkZJR184M1hYX1BDSUNMSworIyAgd2FybmluZyAiSW4gUENJIEhvc3QgTW9kZSwgQ09ORklHXzgzWFhfUENJQ0xLIGluIGluY2x1ZGUvY29uZmlncy9NQ1A4M1hYQURTLmggaXMgaWdvbnJlZC4iCisjIGVuZGlmIC8qIENPTkZJR184M1hYX1BDSUNMSyAqLworLyogUENJIEhvc3QgTW9kZSAqLworCWlmICghKGltLT5yZXNldC5yY3doICYgUkNXSF9QQ0lIT1NUKSkgeworCQkvKiB0aG91Z2ggUkNXSF9QQ0lIT1NUIGlzIGRlZmluZWQgaW4gQ0ZHX0hSQ1dfSElHSCB0aGUgaW0tPnJlc2V0LnJjd2hyIFBDSSBIb3N0IE1vZGUgaXMgZGlzYWJsZWQgKi8KKwkJLyogRklYTUU6IGZpbmRvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gaXNzdWUgc29tZSB3YXJuaW5nICovCisJCXJldHVybiAtMjsKKwl9CisJaWYgKGltLT5jbGsuc3BtciAmIFNQTVJfQ0tJRCkgeworCQlwY2lfc3luY19pbiA9IENPTkZJR184M1hYX0NMS0lOIC8gMjsgLyogUENJIENsb2NrIGlzIGhhbGYgQ09ORklHXzgzWFhfQ0xLSU4gKi8KKwl9CisJZWxzZSB7CisJCXBjaV9zeW5jX2luID0gQ09ORklHXzgzWFhfQ0xLSU47CisJfQorI2Vsc2UKKyMgaWZkZWYgQ09ORklHXzgzWFhfQ0xLSU4KKyMgIHdhcm5pbmcgIkluIFBDSSBBZ2VudCBNb2RlLCBDT05GSUdfODNYWF9DTEtJTiBpbiBpbmNsdWRlL2NvbmZpZ3MvTUNQODNYWEFEUy5oIGlzIGlnb25yZWQuIgorIyBlbmRpZiAvKiBDT05GSUdfODNYWF9DTEtJTiAqLworIyBpZm5kZWYgQ09ORklHXzgzWFhfUENJQ0xLCisjICBlcnJvciAiSW4gUENJIEFnZW50IE1vZGUsIENPTkZJR184M1hYX1BDSUNMSyBtdXN0IGJlIGRlZmluZWQgaW4gaW5jbHVkZS9jb25maWdzL01DUDgzWFhBRFMuaCIKKyMgZW5kaWYgLyogQ09ORklHXzgzWFhfUENJQ0xLICovCisvKiBQQ0kgQWdlbnQgTW9kZSAqLworCWlmIChpbS0+cmVzZXQucmN3aCAmIFJDV0hfUENJSE9TVCkgeworCQkvKiB0aG91Z2ggUkNXSF9QQ0lIT1NUIGlzIG5vdCBkZWZpbmVkIGluIENGR19IUkNXX0hJR0ggdGhlIGltLT5yZXNldC5yY3dociBQQ0kgSG9zdCBNb2RlIGlzIGVuYWJsZWQgKi8KKwkJcmV0dXJuIC0zOworCX0KKwlwY2lfc3luY19pbiA9IENPTkZJR184M1hYX1BDSUNMSzsKKyNlbmRpZiAvKiAoQ0ZHX0hSQ1dfSElHSCB8IFJDV0hfUENJSE9TVCkgKi8KKworCS8qIHdlIGhhdmUgdXAgdG8gZGF0ZSBwY2lfc3luY19pbiAqLworCXNwbWYgPSAoKGltLT5yZXNldC5yY3dsICYgUkNXTF9TUE1GKSA+PiBSQ1dMX1NQTUZfU0hJRlQpOworCWNsa2luX2RpdiA9ICgoaW0tPmNsay5zcG1yICYgU1BNUl9DS0lEKSA+PiBTUE1SX0NLSURfU0hJRlQpOworCisJaWYgKChpbS0+cmVzZXQucmN3bCAmIFJDV0xfTEJJVUNNKSB8fCAoaW0tPnJlc2V0LnJjd2wgJiBSQ1dMX0REUkNNKSkgeworCQljc2JfY2xrCT0gKHBjaV9zeW5jX2luICogc3BtZiAqICgxICsgY2xraW5fZGl2KSkgLyAyOworCX0KKwllbHNlIHsKKwkJY3NiX2NsayA9IHBjaV9zeW5jX2luICogc3BtZiAqICgxICsgY2xraW5fZGl2KTsKKwl9CisKKwlzY2NyID0gaW0tPmNsay5zY2NyOworCXN3aXRjaCAoKHNjY3IgJiBTQ0NSX1RTRUMxQ00pID4+IFNDQ1JfVFNFQzFDTV9TSElGVCkgeworCWNhc2UgMDoKKwkJdHNlYzFfY2xrID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0c2VjMV9jbGsgPSBjc2JfY2xrOworCQlicmVhazsKKwljYXNlIDI6CisJCXRzZWMxX2NsayA9IGNzYl9jbGsgLyAyOworCQlicmVhazsKKwljYXNlIDM6CisJCXRzZWMxX2NsayA9IGNzYl9jbGsgLyAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB1bmtvd24gU0NDUl9UU0VDMUNNIHZhbHVlICovCisJCXJldHVybiAtNDsKKwl9CisKKwlzd2l0Y2ggKChzY2NyICYgU0NDUl9UU0VDMkNNKSA+PiBTQ0NSX1RTRUMyQ01fU0hJRlQpIHsKKwljYXNlIDA6CisJCXRzZWMyX2NsayA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdHNlYzJfY2xrID0gY3NiX2NsazsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0c2VjMl9jbGsgPSBjc2JfY2xrIC8gMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl0c2VjMl9jbGsgPSBjc2JfY2xrIC8gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rb3duIFNDQ1JfVFNFQzJDTSB2YWx1ZSAqLworCQlyZXR1cm4gLTU7CisJfQorCWkyY19jbGsgPSB0c2VjMl9jbGs7CisKKwlzd2l0Y2ggKChzY2NyICYgU0NDUl9FTkNDTSkgPj4gU0NDUl9FTkNDTV9TSElGVCkgeworCWNhc2UgMDoKKwkJZW5jX2NsayA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZW5jX2NsayA9IGNzYl9jbGs7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZW5jX2NsayA9IGNzYl9jbGsgLyAyOworCQlicmVhazsKKwljYXNlIDM6CisJCWVuY19jbGsgPSBjc2JfY2xrIC8gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rb3duIFNDQ1JfRU5DQ00gdmFsdWUgKi8KKwkJcmV0dXJuIC02OworCX0KKworCXN3aXRjaCAoKHNjY3IgJiBTQ0NSX1VTQk1QSENNKSA+PiBTQ0NSX1VTQk1QSENNX1NISUZUKSB7CisJY2FzZSAwOgorCQl1c2JtcGhfY2xrID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl1c2JtcGhfY2xrID0gY3NiX2NsazsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl1c2JtcGhfY2xrID0gY3NiX2NsayAvIDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdXNibXBoX2NsayA9IGNzYl9jbGsgLyAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB1bmtvd24gU0NDUl9VU0JNUEhDTSB2YWx1ZSAqLworCQlyZXR1cm4gLTc7CisJfQorCisJc3dpdGNoICgoc2NjciAmIFNDQ1JfVVNCRFJDTSkgPj4gU0NDUl9VU0JEUkNNX1NISUZUKSB7CisJY2FzZSAwOgorCQl1c2Jkcl9jbGsgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCXVzYmRyX2NsayA9IGNzYl9jbGs7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdXNiZHJfY2xrID0gY3NiX2NsayAvIDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdXNiZHJfY2xrID0gY3NiX2NsayAvIDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua293biBTQ0NSX1VTQkRSQ00gdmFsdWUgKi8KKwkJcmV0dXJuIC04OworCX0KKworCWlmICh1c2JtcGhfY2xrICE9IDAKKwkJJiYgdXNiZHJfY2xrICE9IDAKKwkJJiYgdXNibXBoX2NsayAhPSB1c2Jkcl9jbGsgKSB7CisJCS8qIGlmIFVTQiBNUEggY2xvY2sgaXMgbm90IGRpc2FibGVkIGFuZCBVU0IgRFIgY2xvY2sgaXMgbm90IGRpc2FibGVkIHRoYW4gVVNCIE1QSCAmIFVTQiBEUiBtdXN0IGhhdmUgdGhlIHNhbWUgcmF0ZSAqLworCQlyZXR1cm4gLTk7CisJfQorCisJbGJpdV9jbGsgPSBjc2JfY2xrICogKDEgKyAoKGltLT5yZXNldC5yY3dsICYgUkNXTF9MQklVQ00pID4+IFJDV0xfTEJJVUNNX1NISUZUKSk7CisJbGNyciA9IChpbS0+bGJ1cy5sY3JyICYgTENSUl9DTEtESVYpID4+IExDUlJfQ0xLRElWX1NISUZUOworCXN3aXRjaCAobGNycikgeworCWNhc2UgMjoKKwljYXNlIDQ6CisJY2FzZSA4OgorCQlsY2xrX2NsayA9IGxiaXVfY2xrIC8gbGNycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rbm93biBsY3JyICovCisJCXJldHVybiAtMTA7CisJfQorCisJZGRyX2NsayA9IGNzYl9jbGsgKiAoMSArICgoaW0tPnJlc2V0LnJjd2wgJiBSQ1dMX0REUkNNKSA+PiBSQ1dMX0REUkNNX1NISUZUKSk7CisKKwljb3JlcGxsID0gKGltLT5yZXNldC5yY3dsICYgUkNXTF9DT1JFUExMKSA+PiBSQ1dMX0NPUkVQTExfU0hJRlQ7CisJY29yZWNuZl90YWJfaW5kZXggPSAoKGNvcmVwbGwgJiAweDFGKSA8PCAyKSB8ICgoY29yZXBsbCAmIDB4NjApID4+IDUpOworCWlmIChjb3JlY25mX3RhYl9pbmRleCA+IChzaXplb2YoY29yZWNuZl90YWIpL3NpemVvZihjb3JlY25mX3QpKSApIHsKKwkJLyogY29yZWNuZl90YWJfaW5kZXggaXMgdG9vIGhpZ2gsIHBvc3NpYmx5IHdvcm5nIHZhbHVlICovCisJCXJldHVybiAtMTE7CisJfQorCXN3aXRjaCAoY29yZWNuZl90YWJbY29yZWNuZl90YWJfaW5kZXhdLmNvcmVfY3NiX3JhdGlvKSB7CisJY2FzZSBfYnlwOgorCWNhc2UgX3gxOgorCWNhc2UgXzF4OgorCQljb3JlX2NsayA9IGNzYl9jbGs7CisJCWJyZWFrOworCWNhc2UgXzFfNXg6CisJCWNvcmVfY2xrID0gKDMgKiBjc2JfY2xrKSAvIDI7CisJCWJyZWFrOworCWNhc2UgXzJ4OgorCQljb3JlX2NsayA9IDIgKiBjc2JfY2xrOworCQlicmVhazsKKwljYXNlIF8yXzV4OgorCQljb3JlX2NsayA9ICggNSAqIGNzYl9jbGspIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBfM3g6CisJCWNvcmVfY2xrID0gMyAqIGNzYl9jbGs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua293biBjb3JlIHRvIGNzYiByYXRpbyAqLworCQlyZXR1cm4gLTEyOworCX0KKworCWdkLT5jc2JfY2xrICAgID0gY3NiX2NsayAgIDsKKwlnZC0+dHNlYzFfY2xrICA9IHRzZWMxX2NsayA7CisJZ2QtPnRzZWMyX2NsayAgPSB0c2VjMl9jbGsgOworCWdkLT5jb3JlX2NsayAgID0gY29yZV9jbGsgIDsKKwlnZC0+dXNibXBoX2NsayA9IHVzYm1waF9jbGs7CisJZ2QtPnVzYmRyX2NsayAgPSB1c2Jkcl9jbGsgOworCWdkLT5pMmNfY2xrICAgID0gaTJjX2NsayAgIDsKKwlnZC0+ZW5jX2NsayAgICA9IGVuY19jbGsgICA7CisJZ2QtPmxiaXVfY2xrICAgPSBsYml1X2NsayAgOworCWdkLT5sY2xrX2NsayAgID0gbGNsa19jbGsgIDsKKwlnZC0+ZGRyX2NsayAgICA9IGRkcl9jbGsgICA7CisKKwlnZC0+Y3B1X2NsayA9IGdkLT5jb3JlX2NsazsKKwlnZC0+YnVzX2NsayA9IGdkLT5sYml1X2NsazsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfYnVzX2ZyZXEKKyAqIHJldHVybiBzeXN0ZW0gYnVzIGZyZXEgaW4gSHoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bG9uZyBnZXRfYnVzX2ZyZXEgKHVsb25nIGR1bW15KQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCXJldHVybiBnZC0+Y3NiX2NsazsKK30KKworaW50IHByaW50X2Nsb2NrX2NvbmYgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlwcmludGYoIkNsb2NrIGNvbmZpZ3VyYXRpb246XG4iKTsKKwlwcmludGYoIiAgQ29oZXJlbnQgU3lzdGVtIEJ1czogJTRkIE1IelxuIixnZC0+Y3NiX2Nsay8xMDAwMDAwKTsKKwlwcmludGYoIiAgQ29yZTogICAgICAgICAgICAgICAgJTRkIE1IelxuIixnZC0+Y29yZV9jbGsvMTAwMDAwMCk7CisJcHJpbnRmKCIgIExvY2FsIEJ1cyBDb250cm9sbGVyOiU0ZCBNSHpcbiIsZ2QtPmxiaXVfY2xrLzEwMDAwMDApOworCXByaW50ZigiICBMb2NhbCBCdXM6ICAgICAgICAgICAlNGQgTUh6XG4iLGdkLT5sY2xrX2Nsay8xMDAwMDAwKTsKKwlwcmludGYoIiAgRERSOiAgICAgICAgICAgICAgICAgJTRkIE1IelxuIixnZC0+ZGRyX2Nsay8xMDAwMDAwKTsKKwlwcmludGYoIiAgSTJDOiAgICAgICAgICAgICAgICAgJTRkIE1IelxuIixnZC0+aTJjX2Nsay8xMDAwMDAwKTsKKwlwcmludGYoIiAgVFNFQzE6ICAgICAgICAgICAgICAgJTRkIE1IelxuIixnZC0+dHNlYzFfY2xrLzEwMDAwMDApOworCXByaW50ZigiICBUU0VDMjogICAgICAgICAgICAgICAlNGQgTUh6XG4iLGdkLT50c2VjMl9jbGsvMTAwMDAwMCk7CisJcHJpbnRmKCIgIFVTQiBNUEg6ICAgICAgICAgICAgICU0ZCBNSHpcbiIsZ2QtPnVzYm1waF9jbGsvMTAwMDAwMCk7CisJcHJpbnRmKCIgIFVTQiBEUjogICAgICAgICAgICAgICU0ZCBNSHpcbiIsZ2QtPnVzYmRyX2Nsay8xMDAwMDAwKTsKKworI2lmIDAKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdWxvbmcgc2NjciwgZGZicmc7CisJdWxvbmcgc2NtciwgY29yZWNuZiwgYnVzZGYsIGNwbWRmLCBwbGxkZiwgcGxsbWY7CisJY29yZWNuZl90ICpjcDsKKworCXNjY3IgPSBpbW1hcC0+aW1fY2xrcnN0LmNhcl9zY2NyOworCWRmYnJnID0gKHNjY3IgJiBTQ0NSX0RGQlJHX01TSykgPj4gU0NDUl9ERkJSR19TSElGVDsKKworCXNjbXIgPSBpbW1hcC0+aW1fY2xrcnN0LmNhcl9zY21yOworCWNvcmVjbmYgPSAoc2NtciAmIFNDTVJfQ09SRUNORl9NU0spID4+IFNDTVJfQ09SRUNORl9TSElGVDsKKwlidXNkZiA9IChzY21yICYgU0NNUl9CVVNERl9NU0spID4+IFNDTVJfQlVTREZfU0hJRlQ7CisJY3BtZGYgPSAoc2NtciAmIFNDTVJfQ1BNREZfTVNLKSA+PiBTQ01SX0NQTURGX1NISUZUOworCXBsbGRmID0gKHNjbXIgJiBTQ01SX1BMTERGKSA/IDEgOiAwOworCXBsbG1mID0gKHNjbXIgJiBTQ01SX1BMTE1GX01TSykgPj4gU0NNUl9QTExNRl9TSElGVDsKKworCWNwID0gJmNvcmVjbmZfdGFiW2NvcmVjbmZdOworCisJcHV0cyAoQ1BVX0lEX1NUUiAiIENsb2NrIENvbmZpZ3VyYXRpb25cbiAtIEJ1cy10by1Db3JlIE11bHQgIik7CisKKwlzd2l0Y2ggKGNwLT5iMmNfbXVsdCkgeworCWNhc2UgX2J5cDoKKwkJcHV0cyAoIkJZUEFTUyIpOworCQlicmVhazsKKworCWNhc2UgX29mZjoKKwkJcHV0cyAoIk9GRiIpOworCQlicmVhazsKKworCWNhc2UgX3VuazoKKwkJcHV0cyAoIlVOS05PV04iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGYgKCIlZCVzeCIsCisJCQljcC0+YjJjX211bHQgLyAyLAorCQkJKGNwLT5iMmNfbXVsdCAlIDIpID8gIi41IiA6ICIiKTsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRmICgiLCBWQ08gRGl2ICVkLCA2MHggQnVzIEZyZXEgJXMsIENvcmUgRnJlcSAlc1xuIiwKKwkJCWNwLT52Y29fZGl2LCBjcC0+ZnJlcV82MHgsIGNwLT5mcmVxX2NvcmUpOworCisJcHJpbnRmICgiIC0gZGZicmcgJWxkLCBjb3JlY25mIDB4JTAybHgsIGJ1c2RmICVsZCwgY3BtZGYgJWxkLCAiCisJCQkicGxsZGYgJWxkLCBwbGxtZiAlbGRcbiIsIGRmYnJnLCBjb3JlY25mLCBidXNkZiwgY3BtZGYsIHBsbGRmLAorCQkJcGxsbWYpOworCisJcHJpbnRmICgiIC0gdmNvX291dCAlMTBsZCwgc2NjX2NsayAlMTBsZCwgYnJnX2NsayAlMTBsZFxuIiwKKwkJCWdkLT52Y29fb3V0LCBnZC0+c2NjX2NsaywgZ2QtPmJyZ19jbGspOworCisJcHJpbnRmICgiIC0gY3B1X2NsayAlMTBsZCwgY3BtX2NsayAlMTBsZCwgYnVzX2NsayAlMTBsZFxuIiwKKwkJCWdkLT5jcHVfY2xrLCBnZC0+Y3BtX2NsaywgZ2QtPmJ1c19jbGspOworCisJaWYgKHNjY3IgJiBTQ0NSX1BDSV9NT0RFKSB7CisJCXVpbnQgcGNpX2RpdjsKKworCQlwY2lfZGl2ID0gKCAoc2NjciAmIFNDQ1JfUENJX01PRENLKSA/IDIgOiAxKSAqCisJCQkoICggKHNjY3IgJiBTQ0NSX1BDSURGX01TSykgPj4gU0NDUl9QQ0lERl9TSElGVCkgKyAxKTsKKworCQlwcmludGYgKCIgLSBwY2lfY2xrICUxMGxkXG4iLCAoZ2QtPmNwbV9jbGsgKiAyKSAvIHBjaV9kaXYpOworCX0KKwlwdXRjICgnXG4nKTsKKyNlbmRpZgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvc3RhcnQuUyBiL2NwdS9tcGM4M3h4L3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMDFhNgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4M3h4L3N0YXJ0LlMKQEAgLTAsMCArMSwxMDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk4ICBEYW4gTWFsZWsgPGRtYWxla0BqbGMubmV0PgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBNYWdudXMgRGFtbSA8a2llcmF5cGMwMS5wLnkua2llLmVyYS5lcmljc3Nvbi5zZT4KKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwyMDAyIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiAgVS1Cb290IC0gU3RhcnR1cCBDb2RlIGZvciBNUEM4M3h4IFBvd2VyUEMgYmFzZWQgRW1iZWRkZWQgQm9hcmRzCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPG1wYzgzeHguaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNkZWZpbmUgQ09ORklHXzgzWFgJMQkJLyogbmVlZGVkIGZvciBMaW51eCBrZXJuZWwgaGVhZGVyIGZpbGVzKi8KKyNkZWZpbmUgX0xJTlVYX0NPTkZJR19IIDEJLyogYXZvaWQgcmVhZGluZyBMaW51eCBhdXRvY29uZi5oIGZpbGUgKi8KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorCisjaWZuZGVmICBDT05GSUdfSURFTlRfU1RSSU5HCisjZGVmaW5lICBDT05GSUdfSURFTlRfU1RSSU5HICJNUEM4M1hYIgorI2VuZGlmCisKKy8qIFdlIGRvbid0IHdhbnQgdGhlICBNTVUgeWV0LgorICovCisjdW5kZWYJTVNSX0tFUk5FTAorCisvKgorICogRmxvYXRpbmcgUG9pbnQgZW5hYmxlLCBNYWNoaW5lIENoZWNrIGFuZCBSZWNvdmVyYWJsZSBJbnRlcnIuCisgKi8KKyNpZmRlZiBERUJVRworI2RlZmluZSBNU1JfS0VSTkVMIChNU1JfRlB8TVNSX1JJKQorI2Vsc2UKKyNkZWZpbmUgTVNSX0tFUk5FTCAoTVNSX0ZQfE1TUl9NRXxNU1JfUkkpCisjZW5kaWYKKworLyoKKyAqIFNldCB1cCBHT1Q6IEdsb2JhbCBPZmZzZXQgVGFibGUKKyAqCisgKiBVc2UgcjE0IHRvIGFjY2VzcyB0aGUgR09UCisgKi8KKwlTVEFSVF9HT1QKKwlHT1RfRU5UUlkoX0dPVDJfVEFCTEVfKQorCUdPVF9FTlRSWShfRklYVVBfVEFCTEVfKQorCisJR09UX0VOVFJZKF9zdGFydCkKKwlHT1RfRU5UUlkoX3N0YXJ0X29mX3ZlY3RvcnMpCisJR09UX0VOVFJZKF9lbmRfb2ZfdmVjdG9ycykKKwlHT1RfRU5UUlkodHJhbnNmZXJfdG9faGFuZGxlcikKKworCUdPVF9FTlRSWShfX2luaXRfZW5kKQorCUdPVF9FTlRSWShfZW5kKQorCUdPVF9FTlRSWShfX2Jzc19zdGFydCkKKwlFTkRfR09UCisKKy8qCisgKiBWZXJzaW9uIHN0cmluZyAtIG11c3QgYmUgaW4gZGF0YSBzZWdtZW50IGJlY2F1c2UgTVBDODN4eCB1c2VzIHRoZQorICogZmlyc3QgMjU2IGJ5dGVzIGZvciB0aGUgSGFyZCBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgdGFibGUgKHNlZQorICogYmVsb3cpLiAgU2ltaWxhcmx5LCBjYW4ndCBoYXZlIHRoZSBVLUJvb3QgTWFnaWMgTnVtYmVyIGFzIHRoZSBmaXJzdAorICogdGhpbmcgaW4gdGhlIGltYWdlIC0gZG9uJ3Qga25vdyBob3cgdGhpcyB3aWxsIGFmZmVjdCB0aGUgaW1hZ2UgdG9vbHMsCisgKiBidXQgSSBndWVzcyBJJ2xsIGZpbmQgb3V0IHNvb24uCisgKi8KKwkuZGF0YQorCS5nbG9ibAl2ZXJzaW9uX3N0cmluZwordmVyc2lvbl9zdHJpbmc6CisJLmFzY2lpIFVfQk9PVF9WRVJTSU9OCisJLmFzY2lpICIgKCIsIF9fREFURV9fLCAiIC0gIiwgX19USU1FX18sICIpIgorCS5hc2NpaSAiICIsIENPTkZJR19JREVOVF9TVFJJTkcsICJcMCIKKworCS50ZXh0CisjZGVmaW5lIF9IUkNXX1RBQkxFX0VOVFJZKHcpCQlcCisJLmZpbGwJOCwxLCgoKHcpPj4yNCkmMHhmZik7CVwKKwkuZmlsbAk4LDEsKCgodyk+PjE2KSYweGZmKTsJXAorCS5maWxsCTgsMSwoKCh3KT4+IDgpJjB4ZmYpOwlcCisJLmZpbGwJOCwxLCgoKHcpICAgICkmMHhmZikKKworCV9IUkNXX1RBQkxFX0VOVFJZKENGR19IUkNXX0xPVykKKwlfSFJDV19UQUJMRV9FTlRSWShDRkdfSFJDV19ISUdIKQorCisKKyNpZm5kZWYgQ09ORklHX0RFRkFVTFRfSU1NUgorI2Vycm9yIENPTkZJR19ERUZBVUxUX0lNTVIgbXVzdCBiZSBkZWZpbmVkCisjZW5kaWYgLyogQ0ZHX0RFRkFVTFRfSU1NUiAqLworI2lmbmRlZiBDRkdfSU1NUkJBUgorI2RlZmluZSBDRkdfSU1NUkJBUiBDT05GSUdfREVGQVVMVF9JTU1SCisjZW5kaWYgLyogQ0ZHX0lNTVJCQVIgKi8KKworLyoKKyAqIEFmdGVyIGNvbmZpZ3VyYXRpb24sIGEgc3lzdGVtIHJlc2V0IGV4Y2VwdGlvbiBpcyBleGVjdXRlZCB1c2luZyB0aGUKKyAqIHZlY3RvciBhdCBvZmZzZXQgMHgxMDAgcmVsYXRpdmUgdG8gdGhlIGJhc2Ugc2V0IGJ5IE1TUltJUF0uIElmCisgKiBNU1JbSVBdIGlzIDAsIHRoZSBiYXNlIGFkZHJlc3MgaXMgMHgwMDAwMDAwMC4gSWYgTVNSW0lQXSBpcyAxLCB0aGUKKyAqIGJhc2UgYWRkcmVzcyBpcyAweGZmZjAwMDAwLiBJbiB0aGUgY2FzZSBvZiBhIFBvd2VyIE9uIFJlc2V0IG9yIEhhcmQKKyAqIFJlc2V0LCB0aGUgdmFsdWUgb2YgTVNSW0lQXSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBDSVAgZmllbGQgaW4gdGhlCisgKiBIUkNXLgorICoKKyAqIE90aGVyIGJpdHMgaW4gdGhlIEhSQ1cgc2V0IHVwIHRoZSBCYXNlIEFkZHJlc3MgYW5kIFBvcnQgU2l6ZSBpbiBCUjAuCisgKiBUaGlzIGRldGVybWluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBib290IFJPTSAoZmxhc2ggb3IgRVBST00pIGluIHRoZQorICogcHJvY2Vzc29yJ3MgYWRkcmVzcyBzcGFjZSBhdCBib290IHRpbWUuIEFzIGxvbmcgYXMgdGhlIEhSQ1cgaXMgc2V0IHVwCisgKiBzbyB0aGF0IHdlIGV2ZW50dWFsbHkgZW5kIHVwIGV4ZWN1dGluZyB0aGUgY29kZSBiZWxvdyB3aGVuIHRoZQorICogcHJvY2Vzc29yIGV4ZWN1dGVzIHRoZSByZXNldCBleGNlcHRpb24sIHRoZSBhY3R1YWwgdmFsdWVzIHVzZWQgc2hvdWxkCisgKiBub3QgbWF0dGVyLgorICoKKyAqIE9uY2Ugd2UgaGF2ZSBnb3QgaGVyZSwgdGhlIGFkZHJlc3MgbWFzayBpbiBPUjAgaXMgY2xlYXJlZCBzbyB0aGF0IHRoZQorICogYm90dG9tIDMySyBvZiB0aGUgYm9vdCBST00gaXMgZWZmZWN0aXZlbHkgcmVwZWF0ZWQgYWxsIHRocm91Z2hvdXQgdGhlCisgKiBwcm9jZXNzb3IncyBhZGRyZXNzIHNwYWNlLCBhZnRlciB3aGljaCB3ZSBjYW4ganVtcCB0byB0aGUgYWJzb2x1dGUKKyAqIGFkZHJlc3MgYXQgd2hpY2ggdGhlIGJvb3QgUk9NIHdhcyBsaW5rZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQgcHJvY2VlZAorICogdG8gaW5pdGlhbGlzZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgd2l0aG91dCB3b3JyeWluZyBpZiB0aGUgcnVnIHdpbGwKKyAqIGJlIHB1bGxlZCBvdXQgZnJvbSB1bmRlciB1cywgc28gdG8gc3BlYWsgKGl0IHdpbGwgYmUgZmluZSBhcyBsb25nIGFzCisgKiB3ZSBjb25maWd1cmUgQlIwIHdpdGggdGhlIHNhbWUgYm9vdCBST00gbGluayBhZGRyZXNzKS4KKyAqLworCS4gPSBFWENfT0ZGX1NZU19SRVNFVAorCisJLmdsb2JsCV9zdGFydAorX3N0YXJ0OiAvKiB0aW1lIHQgMCAqLworCWxpCXIyMSwgQk9PVEZMQUdfQ09MRCAgLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gqLworCW5vcAorCWIJYm9vdF9jb2xkCisKKwkuID0gRVhDX09GRl9TWVNfUkVTRVQgKyAweDEwCisKKwkuZ2xvYmwJX3N0YXJ0X3dhcm0KK19zdGFydF93YXJtOgorCWxpCXIyMSwgQk9PVEZMQUdfV0FSTQkvKiBTb2Z0d2FyZSByZWJvb3QJKi8KKwliCWJvb3Rfd2FybQorCisKK2Jvb3RfY29sZDogLyogdGltZSB0IDMgKi8KKwlsaXMJcjQsIENPTkZJR19ERUZBVUxUX0lNTVJAaAorCW5vcAorYm9vdF93YXJtOiAvKiB0aW1lIHQgNSAqLworCW1mbXNyCXI1CQkJLyogc2F2ZSBtc3IgY29udGVudHMJKi8KKwlsaXMJcjMsIENGR19JTU1SQkFSQGgKKwlvcmkJcjMsIHIzLCBDRkdfSU1NUkJBUkBsCisJc3R3CXIzLCBJTU1SQkFSKHI0KQorCisJLyogSW5pdGlhbGlzZSB0aGUgRTMwMCBwcm9jZXNzb3IgY29yZQkJKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlibAlpbml0X2UzMDBfY29yZQorCisjaWZuZGVmIENGR19SQU1CT09UCisKKwkvKiBJbmZsYXRlIGZsYXNoIGxvY2F0aW9uIHNvIGl0IGFwcGVhcnMgZXZlcnl3aGVyZSwgY2FsY3VsYXRlICovCisJLyogdGhlIGFic29sdXRlIGFkZHJlc3MgaW4gZmluYWwgbG9jYXRpb24gb2YgdGhlIEZMQVNILCBqdW1wICAqLworCS8qIHRoZXJlIGFuZCBkZWZsYXRlIHRoZSBmbGFzaCBzaXplIGJhY2sgdG8gbWluaW1hbCBzaXplICAgICAgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJYmwgbWFwX2ZsYXNoX2J5X2xhdzEKKwlsaXMgcjQsIChDRkdfTU9OSVRPUl9CQVNFKUBoCisJb3JpIHI0LCByNCwgKENGR19NT05JVE9SX0JBU0UpQGwKKwlhZGRpIHI1LCByNCwgaW5fZmxhc2ggLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorCW10bHIgcjUKKwlibHIKK2luX2ZsYXNoOgorI2lmIDEgLyogUmVtYXBwaW5nIGZsYXNoIHdpdGggTEFXMC4gKi8KKwlibCByZW1hcF9mbGFzaF9ieV9sYXcwCisjZW5kaWYKKyNlbmRpZgkvKiBDRkdfUkFNQk9PVCAqLworCisJYmwgc2V0dXBfc3RhY2tfaW5fZGF0YV9jYWNoZV9vbl9yMQorCisJLyogbGV0IHRoZSBDLWNvZGUgc2V0IHVwIHRoZSByZXN0CSAgICAgICAgICAgICAgICAgICAgKi8KKwkvKgkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBCZSBjYXJlZnVsIHRvIGtlZXAgY29kZSByZWxvY2F0YWJsZSAmIHN0YWNrIGh1bWJsZSAgICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJR0VUX0dPVAkJCS8qIGluaXRpYWxpemUgR09UIGFjY2VzcwkqLworCisJLyogcjM6IElNTVIgKi8KKwlsaXMJcjMsIENGR19JTU1SQkFSQGgKKwkvKiBydW4gbG93LWxldmVsIENQVSBpbml0IGNvZGUgKGluIEZsYXNoKSovCisJYmwJY3B1X2luaXRfZgorCisJLyogcjM6IEJPT1RGTEFHICovCisJbXIJcjMsIHIyMQorCS8qIHJ1biAxc3QgcGFydCBvZiBib2FyZCBpbml0IGNvZGUgKGluIEZsYXNoKSovCisJYmwJYm9hcmRfaW5pdF9mCisKKy8qCisgKiBWZWN0b3IgVGFibGUKKyAqLworCisJLmdsb2JsCV9zdGFydF9vZl92ZWN0b3JzCitfc3RhcnRfb2ZfdmVjdG9yczoKKworLyogTWFjaGluZSBjaGVjayAqLworCVNURF9FWENFUFRJT04oMHgyMDAsIE1hY2hpbmVDaGVjaywgTWFjaGluZUNoZWNrRXhjZXB0aW9uKQorCisvKiBEYXRhIFN0b3JhZ2UgZXhjZXB0aW9uLiAqLworCVNURF9FWENFUFRJT04oMHgzMDAsIERhdGFTdG9yYWdlLCBVbmtub3duRXhjZXB0aW9uKQorCisvKiBJbnN0cnVjdGlvbiBTdG9yYWdlIGV4Y2VwdGlvbi4gKi8KKwlTVERfRVhDRVBUSU9OKDB4NDAwLCBJbnN0U3RvcmFnZSwgVW5rbm93bkV4Y2VwdGlvbikKKworLyogRXh0ZXJuYWwgSW50ZXJydXB0IGV4Y2VwdGlvbi4gKi8KKyNpZm5kZWYgRklYTUUKKwlTVERfRVhDRVBUSU9OKDB4NTAwLCBFeHRJbnRlcnJ1cHQsIGV4dGVybmFsX2ludGVycnVwdCkKKyNlbmRpZgorCisvKiBBbGlnbm1lbnQgZXhjZXB0aW9uLiAqLworCS4gPSAweDYwMAorQWxpZ25tZW50OgorCUVYQ0VQVElPTl9QUk9MT0cKKwltZnNwcglyNCxEQVIKKwlzdHcJcjQsX0RBUihyMjEpCisJbWZzcHIJcjUsRFNJU1IKKwlzdHcJcjUsX0RTSVNSKHIyMSkKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisJbGkJcjIwLE1TUl9LRVJORUwKKwlybHdpbWkJcjIwLHIyMywwLDE2LDE2CQkvKiBjb3B5IEVFIGJpdCBmcm9tIHNhdmVkIE1TUiAqLworCXJsd2ltaQlyMjAscjIzLDAsMjUsMjUJCS8qIGNvcHkgSVAgYml0IGZyb20gc2F2ZWQgTVNSICovCisJbHd6CXI2LEdPVCh0cmFuc2Zlcl90b19oYW5kbGVyKQorCW10bHIJcjYKKwlibHJsCisuTF9BbGlnbm1lbnQ6CisJLmxvbmcJQWxpZ25tZW50RXhjZXB0aW9uIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwkubG9uZwlpbnRfcmV0dXJuIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKworLyogUHJvZ3JhbSBjaGVjayBleGNlcHRpb24gKi8KKwkuID0gMHg3MDAKK1Byb2dyYW1DaGVjazoKKwlFWENFUFRJT05fUFJPTE9HCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxpCXIyMCxNU1JfS0VSTkVMCisJcmx3aW1pCXIyMCxyMjMsMCwxNiwxNgkJLyogY29weSBFRSBiaXQgZnJvbSBzYXZlZCBNU1IgKi8KKwlybHdpbWkJcjIwLHIyMywwLDI1LDI1CQkvKiBjb3B5IElQIGJpdCBmcm9tIHNhdmVkIE1TUiAqLworCWx3eglyNixHT1QodHJhbnNmZXJfdG9faGFuZGxlcikKKwltdGxyCXI2CisJYmxybAorLkxfUHJvZ3JhbUNoZWNrOgorCS5sb25nCVByb2dyYW1DaGVja0V4Y2VwdGlvbiAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJLmxvbmcJaW50X3JldHVybiAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisKKwlTVERfRVhDRVBUSU9OKDB4ODAwLCBGUFVuYXZhaWxhYmxlLCBVbmtub3duRXhjZXB0aW9uKQorCisJLyogSSBndWVzcyB3ZSBjb3VsZCBpbXBsZW1lbnQgZGVjcmVtZW50ZXIsIGFuZCBtYXkgaGF2ZQorCSAqIHRvIHNvbWVkYXkgZm9yIHRpbWVrZWVwaW5nLgorCSAqLworCVNURF9FWENFUFRJT04oMHg5MDAsIERlY3JlbWVudGVyLCB0aW1lcl9pbnRlcnJ1cHQpCisKKwlTVERfRVhDRVBUSU9OKDB4YTAwLCBUcmFwXzBhLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHhiMDAsIFRyYXBfMGIsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweGMwMCwgU3lzdGVtQ2FsbCwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4ZDAwLCBTaW5nbGVTdGVwLCBVbmtub3duRXhjZXB0aW9uKQorCisJU1REX0VYQ0VQVElPTigweGUwMCwgVHJhcF8wZSwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4ZjAwLCBUcmFwXzBmLCBVbmtub3duRXhjZXB0aW9uKQorCisJU1REX0VYQ0VQVElPTigweDEwMDAsIEluc3RydWN0aW9uVExCTWlzcywgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4MTEwMCwgRGF0YUxvYWRUTEJNaXNzLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxMjAwLCBEYXRhU3RvcmVUTEJNaXNzLCBVbmtub3duRXhjZXB0aW9uKQorI2lmZGVmIERFQlVHCisJLiA9IDB4MTMwMAorCS8qCisJICogVGhpcyBleGNlcHRpb24gb2NjdXJzIHdoZW4gdGhlIHByb2dyYW0gY291bnRlciBtYXRjaGVzIHRoZQorCSAqIEluc3RydWN0aW9uIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciAoSUFCUikuCisJICoKKwkgKiBJIHdhbnQgdGhlIGNwdSB0byBoYWx0IGlmIHRoaXMgb2NjdXJzIHNvIEkgY2FuIGh1bnQgYXJvdW5kCisJICogd2l0aCB0aGUgZGVidWdnZXIgYW5kIGxvb2sgYXQgdGhpbmdzLgorCSAqCisJICogV2hlbiBERUJVRyBpcyBkZWZpbmVkLCBib3RoIG1hY2hpbmUgY2hlY2sgZW5hYmxlIChpbiB0aGUgTVNSKQorCSAqIGFuZCBjaGVja3N0b3AgcmVzZXQgZW5hYmxlIChpbiB0aGUgcmVzZXQgbW9kZSByZWdpc3RlcikgYXJlCisJICogdHVybmVkIG9mZiBhbmQgc28gYSBjaGVja3N0b3AgY29uZGl0aW9uIHdpbGwgcmVzdWx0IGluIHRoZSBjcHUKKwkgKiBoYWx0aW5nLgorCSAqCisJICogSSBmb3JjZSB0aGUgY3B1IGludG8gYSBjaGVja3N0b3AgY29uZGl0aW9uIGJ5IHB1dHRpbmcgYW4gaWxsZWdhbAorCSAqIGluc3RydWN0aW9uIGhlcmUgKGF0IGxlYXN0IHRoaXMgaXMgdGhlIHRoZW9yeSkuCisJICoKKwkgKiB3ZWxsIC0gdGhhdCBkaWRudCB3b3JrLCBzbyBqdXN0IGRvIGFuIGluZmluaXRlIGxvb3AhCisJICovCisxOgliCTFiCisjZWxzZQorCVNURF9FWENFUFRJT04oMHgxMzAwLCBJbnN0cnVjdGlvbkJyZWFrcG9pbnQsIERlYnVnRXhjZXB0aW9uKQorI2VuZGlmCisJU1REX0VYQ0VQVElPTigweDE0MDAsIFNNSSwgVW5rbm93bkV4Y2VwdGlvbikKKworCVNURF9FWENFUFRJT04oMHgxNTAwLCBUcmFwXzE1LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxNjAwLCBUcmFwXzE2LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxNzAwLCBUcmFwXzE3LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxODAwLCBUcmFwXzE4LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxOTAwLCBUcmFwXzE5LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxYTAwLCBUcmFwXzFhLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxYjAwLCBUcmFwXzFiLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxYzAwLCBUcmFwXzFjLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxZDAwLCBUcmFwXzFkLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxZTAwLCBUcmFwXzFlLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxZjAwLCBUcmFwXzFmLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyMDAwLCBUcmFwXzIwLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyMTAwLCBUcmFwXzIxLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyMjAwLCBUcmFwXzIyLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyMzAwLCBUcmFwXzIzLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyNDAwLCBUcmFwXzI0LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyNTAwLCBUcmFwXzI1LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyNjAwLCBUcmFwXzI2LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyNzAwLCBUcmFwXzI3LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyODAwLCBUcmFwXzI4LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyOTAwLCBUcmFwXzI5LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyYTAwLCBUcmFwXzJhLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyYjAwLCBUcmFwXzJiLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyYzAwLCBUcmFwXzJjLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyZDAwLCBUcmFwXzJkLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyZTAwLCBUcmFwXzJlLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgyZjAwLCBUcmFwXzJmLCBVbmtub3duRXhjZXB0aW9uKQorCisKKwkuZ2xvYmwJX2VuZF9vZl92ZWN0b3JzCitfZW5kX29mX3ZlY3RvcnM6CisKKwkuID0gMHgzMDAwCisKKy8qCisgKiBUaGlzIGNvZGUgZmluaXNoZXMgc2F2aW5nIHRoZSByZWdpc3RlcnMgdG8gdGhlIGV4Y2VwdGlvbiBmcmFtZQorICogYW5kIGp1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGZvciB0aGUgZXhjZXB0aW9uLgorICogUmVnaXN0ZXIgcjIxIGlzIHBvaW50ZXIgaW50byB0cmFwIGZyYW1lLCByMSBoYXMgbmV3IHN0YWNrIHBvaW50ZXIuCisgKi8KKwkuZ2xvYmwJdHJhbnNmZXJfdG9faGFuZGxlcgordHJhbnNmZXJfdG9faGFuZGxlcjoKKwlzdHcJcjIyLF9OSVAocjIxKQorCWxpcwlyMjIsTVNSX1BPV0BoCisJYW5kYwlyMjMscjIzLHIyMgorCXN0dwlyMjMsX01TUihyMjEpCisJU0FWRV9HUFIoNywgcjIxKQorCVNBVkVfNEdQUlMoOCwgcjIxKQorCVNBVkVfOEdQUlMoMTIsIHIyMSkKKwlTQVZFXzhHUFJTKDI0LCByMjEpCisJbWZscglyMjMKKwlhbmRpLglyMjQscjIzLDB4M2YwMAkJLyogZ2V0IHZlY3RvciBvZmZzZXQgKi8KKwlzdHcJcjI0LFRSQVAocjIxKQorCWxpCXIyMiwwCisJc3R3CXIyMixSRVNVTFQocjIxKQorCWx3eglyMjQsMChyMjMpCQkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgaGFuZGxlciAqLworCWx3eglyMjMsNChyMjMpCQkvKiB3aGVyZSB0byBnbyB3aGVuIGRvbmUgKi8KKwltdHNwcglTUlIwLHIyNAorCW10c3ByCVNSUjEscjIwCisJbXRscglyMjMKKwlTWU5DCisJcmZpCQkJCS8qIGp1bXAgdG8gaGFuZGxlciwgZW5hYmxlIE1NVSAqLworCitpbnRfcmV0dXJuOgorCW1mbXNyCXIyOAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJbGkJcjQsMAorCW9yaQlyNCxyNCxNU1JfRUUKKwlhbmRjCXIyOCxyMjgscjQKKwlTWU5DCQkJLyogU29tZSBjaGlwIHJldnMgbmVlZCB0aGlzLi4uICovCisJbXRtc3IJcjI4CisJU1lOQworCWx3eglyMixfQ1RSKHIxKQorCWx3eglyMCxfTElOSyhyMSkKKwltdGN0cglyMgorCW10bHIJcjAKKwlsd3oJcjIsX1hFUihyMSkKKwlsd3oJcjAsX0NDUihyMSkKKwltdHNwcglYRVIscjIKKwltdGNyZgkweEZGLHIwCisJUkVTVF8xMEdQUlMoMywgcjEpCisJUkVTVF8xMEdQUlMoMTMsIHIxKQorCVJFU1RfOEdQUlMoMjMsIHIxKQorCVJFU1RfR1BSKDMxLCByMSkKKwlsd3oJcjIsX05JUChyMSkJLyogUmVzdG9yZSBlbnZpcm9ubWVudCAqLworCWx3eglyMCxfTVNSKHIxKQorCW10c3ByCVNSUjAscjIKKwltdHNwcglTUlIxLHIwCisJbHd6CXIwLEdQUjAocjEpCisJbHd6CXIyLEdQUjIocjEpCisJbHd6CXIxLEdQUjEocjEpCisJU1lOQworCXJmaQorCisvKgorICogVGhpcyBjb2RlIGluaXRpYWxpc2VzIHRoZSBFMzAwIHByb2Nlc3NvciBjb3JlCisgKiAoY29uZm9ybXMgdG8gUG93ZXJQQyA2MDNlIHNwZWMpCisgKiBOb3RlOiBleHBlY3RzIG9yaWdpbmFsIE1TUiBjb250ZW50cyB0byBiZSBpbiByNS4KKyAqLworCS5nbG9ibAlpbml0X2UzMDBfY29yZQoraW5pdF9lMzAwX2NvcmU6IC8qIHRpbWUgdCAxMCAqLworCS8qIEluaXRpYWxpemUgbWFjaGluZSBzdGF0dXM7IGVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdCAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJbGkJcjMsIE1TUl9LRVJORUwJCQkvKiBTZXQgTUUgYW5kIFJJIGZsYWdzICovCisJcmx3aW1pCXIzLCByNSwgMCwgMjUsIDI1CS8qIHByZXNlcnZlIElQIGJpdCBzZXQgYnkgSFJDVyAqLworI2lmZGVmIERFQlVHCisJcmx3aW1pCXIzLCByNSwgMCwgMjEsIDIyICAgLyogZGVidWdnZXIgbWlnaHQgc2V0IFNFICYgQkUgYml0cyAqLworI2VuZGlmCisJU1lOQwkJCQkJCS8qIFNvbWUgY2hpcCByZXZzIG5lZWQgdGhpcy4uLiAqLworCW10bXNyCXIzCisJU1lOQworCW10c3ByCVNSUjEsIHIzCQkJLyogTWFrZSBTUlIxIG1hdGNoIE1TUiAqLworCisKKwlsaXMJcjMsIENGR19JTU1SQkFSQGgKKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKKwkvKiBJbml0aWFsaXNlIHRoZSBXYXRoY2RvZyB2YWx1ZXMgYW5kIHJlc2V0IGl0IChpZiByZXEpICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxpcyByNCwgQ0ZHX1dBVENIRE9HX1ZBTFVFCisJb3JpIHI0LCByNCwgKFNXQ1JSX1NXRU4gfCBTV0NSUl9TV1JJIHwgU1dDUlJfU1dQUikKKwlzdHcgcjQsIFNXQ1JSKHIzKQorCisJLyogYW5kIHJlc2V0IGl0ICovCisKKwlsaQlyNCwgMHg1NTZDCisJc3RoCXI0LCBTV1NSUkBsKHIzKQorCWxpCXI0LCAweEFBMzkKKwlzdGgJcjQsIFNXU1JSQGwocjMpCisjZWxzZQorCS8qIERpc2FibGUgV2F0aGNkb2cgICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl4b3IgcjQsIHI0LCByNAorCXN0dyByNCwgU1dDUlIocjMpCisjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HICovCisKKwkvKiBJbml0aWFsaXplIHRoZSBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgUmVnaXN0ZXJzICovCisJLyogSElEMCBhbHNvIGNvbnRhaW5zIGNhY2hlIGNvbnRyb2wJCQkqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWxpcwlyMywgQ0ZHX0hJRDBfSU5JVEBoCisJb3JpCXIzLCByMywgQ0ZHX0hJRDBfSU5JVEBsCisJU1lOQworCW10c3ByCUhJRDAsIHIzCisKKwlsaXMJcjMsIENGR19ISUQwX0ZJTkFMQGgKKwlvcmkJcjMsIHIzLCBDRkdfSElEMF9GSU5BTEBsCisJU1lOQworCW10c3ByCUhJRDAsIHIzCisKKwlsaXMJcjMsIENGR19ISUQyQGgKKwlvcmkJcjMsIHIzLCBDRkdfSElEMkBsCisJU1lOQworCW10c3ByCUhJRDIsIHIzCisKKwkvKiBjbGVhciBhbGwgQkFUJ3MJCQkJCSovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCXhvcglyMCwgcjAsIHIwCisJbXRzcHIJREJBVDBVLCByMAorCW10c3ByCURCQVQwTCwgcjAKKwltdHNwcglEQkFUMVUsIHIwCisJbXRzcHIJREJBVDFMLCByMAorCW10c3ByCURCQVQyVSwgcjAKKwltdHNwcglEQkFUMkwsIHIwCisJbXRzcHIJREJBVDNVLCByMAorCW10c3ByCURCQVQzTCwgcjAKKwltdHNwcglJQkFUMFUsIHIwCisJbXRzcHIJSUJBVDBMLCByMAorCW10c3ByCUlCQVQxVSwgcjAKKwltdHNwcglJQkFUMUwsIHIwCisJbXRzcHIJSUJBVDJVLCByMAorCW10c3ByCUlCQVQyTCwgcjAKKwltdHNwcglJQkFUM1UsIHIwCisJbXRzcHIJSUJBVDNMLCByMAorCVNZTkMKKworCS8qIGludmFsaWRhdGUgYWxsIHRsYidzCisJICoKKwkgKiBGcm9tIHRoZSA2MDNlIFVzZXIgTWFudWFsOiAiVGhlIDYwM2UgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8KKwkgKiBpbnZhbGlkYXRlIGEgVExCIGVudHJ5LiBUaGUgVExCIEludmFsaWRhdGUgRW50cnkgKHRsYmllKQorCSAqIGluc3RydWN0aW9uIGludmFsaWRhdGVzIHRoZSBUTEIgZW50cnkgaW5kZXhlZCBieSB0aGUgRUEsIGFuZAorCSAqIG9wZXJhdGVzIG9uIGJvdGggdGhlIGluc3RydWN0aW9uIGFuZCBkYXRhIFRMQnMgc2ltdWx0YW5lb3VzbHkKKwkgKiBpbnZhbGlkYXRpbmcgZm91ciBUTEIgZW50cmllcyAoYm90aCBzZXRzIGluIGVhY2ggVExCKS4gVGhlCisJICogaW5kZXggY29ycmVzcG9uZHMgdG8gYml0cyAxNS0xOSBvZiB0aGUgRUEuIFRvIGludmFsaWRhdGUgYWxsCisJICogZW50cmllcyB3aXRoaW4gYm90aCBUTEJzLCAzMiB0bGJpZSBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlCisJICogaXNzdWVkLCBpbmNyZW1lbnRpbmcgdGhpcyBmaWVsZCBieSBvbmUgZWFjaCB0aW1lLiIKKwkgKgorCSAqICJOb3RlIHRoYXQgdGhlIHRsYmlhIGluc3RydWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGUKKwkgKiA2MDNlLiIKKwkgKgorCSAqIGJpdHMgMTUtMTkgY29ycmVzcG9uZCB0byBhZGRyZXNzZXMgMHgwMDAwMDAwMCB0byAweDAwMDFGMDAwCisJICogaW5jcmVtZW50aW5nIGJ5IDB4MTAwMCBlYWNoIHRpbWUuIFRoZSBjb2RlIGJlbG93IGlzIHNvcnQgb2YKKwkgKiBiYXNlZCBvbiBjb2RlIGluICJmbHVzaF90bGJzIiBmcm9tIGFyY2gvcHBjL2tlcm5lbC9oZWFkLlMKKwkgKgorCSAqLworCisJbGkJcjMsIDMyCisJbXRjdHIJcjMKKwlsaQlyMywgMAorMToJdGxiaWUJcjMKKwlhZGRpCXIzLCByMywgMHgxMDAwCisJYmRuegkxYgorCVNZTkMKKworCS8qIERvbmUhCQkJCQkJKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJYmxyCisKKy8qIENhY2hlIGZ1bmN0aW9ucy4KKyAqCisgKiBOb3RlOiByZXF1aXJlcyB0aGF0IGFsbCBjYWNoZSBiaXRzIGluCisgKiBISUQwIGFyZSBpbiB0aGUgbG93IGhhbGYgd29yZC4KKyAqLworCS5nbG9ibAlpY2FjaGVfZW5hYmxlCitpY2FjaGVfZW5hYmxlOgorCW1mc3ByCXIzLCBISUQwCisJb3JpCXIzLCByMywgSElEMF9JQ0UKKwlsaXMJcjQsIDAKKwlvcmkJcjQsIHI0LCBISUQwX0lMT0NLCisJYW5kYwlyMywgcjMsIHI0CisJb3JpCXI0LCByMywgSElEMF9JQ0ZJCisJaXN5bmMKKwltdHNwcglISUQwLCByNCAgICAvKiBzZXRzIGVuYWJsZSBhbmQgaW52YWxpZGF0ZSwgY2xlYXJzIGxvY2sgKi8KKwlpc3luYworCW10c3ByCUhJRDAsIHIzCS8qIGNsZWFycyBpbnZhbGlkYXRlICovCisJYmxyCisKKwkuZ2xvYmwJaWNhY2hlX2Rpc2FibGUKK2ljYWNoZV9kaXNhYmxlOgorCW1mc3ByCXIzLCBISUQwCisJbGlzCXI0LCAwCisJb3JpCXI0LCByNCwgSElEMF9JQ0V8SElEMF9JTE9DSworCWFuZGMJcjMsIHIzLCByNAorCW9yaQlyNCwgcjMsIEhJRDBfSUNGSQorCWlzeW5jCisJbXRzcHIJSElEMCwgcjQgICAgIC8qIHNldHMgaW52YWxpZGF0ZSwgY2xlYXJzIGVuYWJsZSBhbmQgbG9jayovCisJaXN5bmMKKwltdHNwcglISUQwLCByMwkvKiBjbGVhcnMgaW52YWxpZGF0ZSAqLworCWJscgorCisJLmdsb2JsCWljYWNoZV9zdGF0dXMKK2ljYWNoZV9zdGF0dXM6CisJbWZzcHIJcjMsIEhJRDAKKwlybHdpbm0JcjMsIHIzLCBISUQwX0lDRV9TSElGVCwgMzEsIDMxCisJYmxyCisKKwkuZ2xvYmwJZGNhY2hlX2VuYWJsZQorZGNhY2hlX2VuYWJsZToKKwltZnNwcglyMywgSElEMAorCW9yaQlyMywgcjMsIEhJRDBfRU5BQkxFX0RBVEFfQ0FDSEUKKwlsaXMJcjQsIDAKKwlvcmkJcjQsIHI0LCBISUQwX0xPQ0tfREFUQV9DQUNIRQorCWFuZGMJcjMsIHIzLCByNAorCW9yaQlyNCwgcjMsIEhJRDBfTE9DS19JTlNUUlVDVElPTl9DQUNIRQorCXN5bmMKKwltdHNwcglISUQwLCByNCAgICAvKiBzZXRzIGVuYWJsZSBhbmQgaW52YWxpZGF0ZSwgY2xlYXJzIGxvY2sgKi8KKwlzeW5jCisJbXRzcHIJSElEMCwgcjMJLyogY2xlYXJzIGludmFsaWRhdGUgKi8KKwlibHIKKworCS5nbG9ibAlkY2FjaGVfZGlzYWJsZQorZGNhY2hlX2Rpc2FibGU6CisJbWZzcHIJcjMsIEhJRDAKKwlsaXMJcjQsIDAKKwlvcmkJcjQsIHI0LCBISUQwX0VOQUJMRV9EQVRBX0NBQ0hFfEhJRDBfTE9DS19EQVRBX0NBQ0hFCisJYW5kYwlyMywgcjMsIHI0CisJb3JpCXI0LCByMywgSElEMF9JTlZBTElEQVRFX0RBVEFfQ0FDSEUKKwlzeW5jCisJbXRzcHIJSElEMCwgcjQgICAgLyogc2V0cyBpbnZhbGlkYXRlLCBjbGVhcnMgZW5hYmxlIGFuZCBsb2NrICovCisJc3luYworCW10c3ByCUhJRDAsIHIzCS8qIGNsZWFycyBpbnZhbGlkYXRlICovCisJYmxyCisKKwkuZ2xvYmwJZGNhY2hlX3N0YXR1cworZGNhY2hlX3N0YXR1czoKKwltZnNwcglyMywgSElEMAorCXJsd2lubQlyMywgcjMsIEhJRDBfRENFX1NISUZULCAzMSwgMzEKKwlibHIKKworCS5nbG9ibCBnZXRfcHZyCitnZXRfcHZyOgorCW1mc3ByCXIzLCBQVlIKKwlibHIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHZvaWQgcmVsb2NhdGVfY29kZSAoYWRkcl9zcCwgZ2QsIGFkZHJfbW9uaSkKKyAqCisgKiBUaGlzICJmdW5jdGlvbiIgZG9lcyBub3QgcmV0dXJuLCBpbnN0ZWFkIGl0IGNvbnRpbnVlcyBpbiBSQU0KKyAqIGFmdGVyIHJlbG9jYXRpbmcgdGhlIG1vbml0b3IgY29kZS4KKyAqCisgKiByMyA9IGRlc3QKKyAqIHI0ID0gc3JjCisgKiByNSA9IGxlbmd0aCBpbiBieXRlcworICogcjYgPSBjYWNoZWxpbmVzaXplCisgKi8KKwkuZ2xvYmwJcmVsb2NhdGVfY29kZQorcmVsb2NhdGVfY29kZToKKwltcglyMSwgIHIzCQkvKiBTZXQgbmV3IHN0YWNrIHBvaW50ZXIJKi8KKwltcglyOSwgIHI0CQkvKiBTYXZlIGNvcHkgb2YgR2xvYmFsIERhdGEgcG9pbnRlciAqLworCW1yCXIxMCwgcjUJCS8qIFNhdmUgY29weSBvZiBEZXN0aW5hdGlvbiBBZGRyZXNzICovCisKKwltcglyMywgIHI1CQkJCS8qIERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KKwlsaXMJcjQsIENGR19NT05JVE9SX0JBU0VAaAkJLyogU291cmNlICAgICAgQWRkcmVzcyAqLworCW9yaQlyNCwgcjQsIENGR19NT05JVE9SX0JBU0VAbAorCWx3eglyNSwgR09UKF9faW5pdF9lbmQpCisJc3ViCXI1LCByNSwgcjQKKwlsaQlyNiwgQ0ZHX0NBQ0hFTElORV9TSVpFCQkvKiBDYWNoZSBMaW5lIFNpemUgKi8KKworCS8qCisJICogRml4IEdPVCBwb2ludGVyOgorCSAqCisJICogTmV3IEdPVC1QVFIgPSAob2xkIEdPVC1QVFIgLSBDRkdfTU9OSVRPUl9CQVNFKQorCSAqCQkrIERlc3RpbmF0aW9uIEFkZHJlc3MKKwkgKgorCSAqIE9mZnNldDoKKwkgKi8KKwlzdWIJcjE1LCByMTAsIHI0CisKKwkvKiBGaXJzdCBvdXIgb3duIEdPVCAqLworCWFkZAlyMTQsIHIxNCwgcjE1CisJLyogdGhlbiB0aGUgb25lIHVzZWQgYnkgdGhlIEMgY29kZSAqLworCWFkZAlyMzAsIHIzMCwgcjE1CisKKwkvKgorCSAqIE5vdyByZWxvY2F0ZSBjb2RlCisJICovCisKKwljbXBsdwljcjEscjMscjQKKwlhZGRpCXIwLHI1LDMKKwlzcndpLglyMCxyMCwyCisJYmVxCWNyMSw0ZgkJLyogSW4gcGxhY2UgY29weSBpcyBub3QgbmVjZXNzYXJ5ICovCisJYmVxCTdmCQkvKiBQcm90ZWN0IGFnYWluc3QgMCBjb3VudAkgICovCisJbXRjdHIJcjAKKwliZ2UJY3IxLDJmCisJbGEJcjgsLTQocjQpCisJbGEJcjcsLTQocjMpCisKKwkvKiBjb3B5ICovCisxOglsd3p1CXIwLDQocjgpCisJc3R3dQlyMCw0KHI3KQorCWJkbnoJMWIKKworCWFkZGkJcjAscjUsMworCXNyd2kuCXIwLHIwLDIKKwltdGN0cglyMAorCWxhCXI4LC00KHI0KQorCWxhCXI3LC00KHIzKQorCisJLyogYW5kIGNvbXBhcmUgKi8KKzIwOglsd3p1CXIyMCw0KHI4KQorCWx3enUJcjIxLDQocjcpCisJeG9yLiByMjIsIHIyMCwgcjIxCisJYm5lICAzMGYKKwliZG56CTIwYgorCWIgNGYKKworCS8qIGNvbXBhcmUgZmFpbGVkICovCiszMDoJbGkgcjMsIDAKKwlibHIKKworMjoJc2x3aQlyMCxyMCwyIC8qIHJlIGNvcHkgaW4gcmV2ZXJzZSBvcmRlciAuLi4geSBkbyB3ZSBuZWVkZWQgaXQ/ICovCisJYWRkCXI4LHI0LHIwCisJYWRkCXI3LHIzLHIwCiszOglsd3p1CXIwLC00KHI4KQorCXN0d3UJcjAsLTQocjcpCisJYmRuegkzYgorCisvKgorICogTm93IGZsdXNoIHRoZSBjYWNoZTogbm90ZSB0aGF0IHdlIG11c3Qgc3RhcnQgZnJvbSBhIGNhY2hlIGFsaWduZWQKKyAqIGFkZHJlc3MuIE90aGVyd2lzZSB3ZSBtaWdodCBtaXNzIG9uZSBjYWNoZSBsaW5lLgorICovCis0OgorCWJsIHVuX3NldHVwX3N0YWNrX2luX2RhdGFfY2FjaGUKKwltciByNywgcjMKKwltciByOCwgcjQKKwlibCBkY2FjaGVfZGlzYWJsZQorCW1yIHIzLCByNworCW1yIHI0LCByOAorCisJY21wd2kJcjYsMAorCWFkZAlyNSxyMyxyNQorCWJlcQk3ZgkvKiBBbHdheXMgZmx1c2ggcHJlZmV0Y2ggcXVldWUgaW4gYW55IGNhc2UgKi8KKwlzdWJpCXIwLHI2LDEKKwlhbmRjCXIzLHIzLHIwCisJbWZzcHIJcjcsSElEMAkJLyogZG9uJ3QgZG8gZGNic3QgaWYgZGNhY2hlIGlzIGRpc2FibGVkKi8KKwlybHdpbm0JcjcscjcsSElEMF9EQ0VfU0hJRlQsMzEsMzEKKwljbXB3aQlyNywwCisJYmVxCTlmCisJbXIJcjQscjMKKzU6CWRjYnN0CTAscjQKKwlhZGQJcjQscjQscjYKKwljbXBsdwlyNCxyNQorCWJsdAk1YgorCXN5bmMJCS8qIFdhaXQgZm9yIGFsbCBkY2JzdCB0byBjb21wbGV0ZSBvbiBidXMgKi8KKzk6CW1mc3ByCXI3LEhJRDAJCS8qIGRvbid0IGRvIGljYmkgaWYgaWNhY2hlIGlzIGRpc2FibGVkICovCisJcmx3aW5tCXI3LHI3LEhJRDBfRENFX1NISUZULDMxLDMxCisJY21wd2kJcjcsMAorCWJlcQk3ZgorCW1yCXI0LHIzCis2OglpY2JpCTAscjQKKwlhZGQJcjQscjQscjYKKwljbXBsdwlyNCxyNQorCWJsdAk2YgorNzoJc3luYwkJLyogV2FpdCBmb3IgYWxsIGljYmkgdG8gY29tcGxldGUgb24gYnVzCSovCisJaXN5bmMKKworLyoKKyAqIFdlIGFyZSBkb25lLiBEbyBub3QgcmV0dXJuLCBpbnN0ZWFkIGJyYW5jaCB0byBzZWNvbmQgcGFydCBvZiBib2FyZAorICogaW5pdGlhbGl6YXRpb24sIG5vdyBydW5uaW5nIGZyb20gUkFNLgorICovCisKKwlhZGRpCXIwLCByMTAsIGluX3JhbSAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJbXRscglyMAorCWJscgorCitpbl9yYW06CisKKwkvKgorCSAqIFJlbG9jYXRpb24gRnVuY3Rpb24sIHIxNCBwb2ludCB0byBnb3QyKzB4ODAwMAorCSAqCisJICogQWRqdXN0IGdvdDIgcG9pbnRlcnMsIG5vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoaXMgY29kZQorCSAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKwkgKi8KKwlsaQlyMCxfX2dvdDJfZW50cmllc0BzZWN0b2ZmQGwKKwlsYQlyMyxHT1QoX0dPVDJfVEFCTEVfKQorCWx3eglyMTEsR09UKF9HT1QyX1RBQkxFXykKKwltdGN0cglyMAorCXN1YglyMTEscjMscjExCisJYWRkaQlyMyxyMywtNAorMToJbHd6dQlyMCw0KHIzKQorCWFkZAlyMCxyMCxyMTEKKwlzdHcJcjAsMChyMykKKwliZG56CTFiCisKKwkvKgorCSAqIE5vdyBhZGp1c3QgdGhlIGZpeHVwcyBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZSBmaXh1cHMKKwkgKiBpbiBjYXNlIHdlIG5lZWQgdG8gbW92ZSBvdXJzZWx2ZXMgYWdhaW4uCisJICovCisyOglsaQlyMCxfX2ZpeHVwX2VudHJpZXNAc2VjdG9mZkBsCisJbHd6CXIzLEdPVChfRklYVVBfVEFCTEVfKQorCWNtcHdpCXIwLDAKKwltdGN0cglyMAorCWFkZGkJcjMscjMsLTQKKwliZXEJNGYKKzM6CWx3enUJcjQsNChyMykKKwlsd3p1eAlyMCxyNCxyMTEKKwlhZGQJcjAscjAscjExCisJc3R3CXIxMCwwKHIzKQorCXN0dwlyMCwwKHI0KQorCWJkbnoJM2IKKzQ6CitjbGVhcl9ic3M6CisJLyoKKwkgKiBOb3cgY2xlYXIgQlNTIHNlZ21lbnQKKwkgKi8KKwlsd3oJcjMsR09UKF9fYnNzX3N0YXJ0KQorI2lmIGRlZmluZWQoQ09ORklHX0hZTU9EKQorCS8qCisJICogRm9yIEhZTU9EIC0gdGhlIGVudmlyb25tZW50IGlzIHRoZSB2ZXJ5IGxhc3QgaXRlbSBpbiBmbGFzaC4KKwkgKiBUaGUgcmVhbCAuYnNzIHN0b3BzIGp1c3QgYmVmb3JlIGVudmlyb25tZW50IHN0YXJ0cywgc28gb25seQorCSAqIGNsZWFyIHVwIHRvIHRoYXQgcG9pbnQuCisJICoKKwkgKiB0YWtlbiBmcm9tIG1vZHMgZm9yIEZBRFMgYm9hcmQKKwkgKi8KKwlsd3oJcjQsR09UKGVudmlyb25tZW50KQorI2Vsc2UKKwlsd3oJcjQsR09UKF9lbmQpCisjZW5kaWYKKworCWNtcGx3CTAsIHIzLCByNAorCWJlcQk2ZgorCisJbGkJcjAsIDAKKzU6CisJc3R3CXIwLCAwKHIzKQorCWFkZGkJcjMsIHIzLCA0CisJY21wbHcJMCwgcjMsIHI0CisJYm5lCTViCis2OgorCisJbXIJcjMsIHI5CQkvKiBHbG9iYWwgRGF0YSBwb2ludGVyCQkqLworCW1yCXI0LCByMTAJCS8qIERlc3RpbmF0aW9uIEFkZHJlc3MJCSovCisJYmwJYm9hcmRfaW5pdF9yCisKKwkvKgorCSAqIENvcHkgZXhjZXB0aW9uIHZlY3RvciBjb2RlIHRvIGxvdyBtZW1vcnkKKwkgKgorCSAqIHIzOiBkZXN0X2FkZHIKKwkgKiByNzogc291cmNlIGFkZHJlc3MsIHI4OiBlbmQgYWRkcmVzcywgcjk6IHRhcmdldCBhZGRyZXNzCisJICovCisJLmdsb2JsCXRyYXBfaW5pdAordHJhcF9pbml0OgorCWx3eglyNywgR09UKF9zdGFydCkKKwlsd3oJcjgsIEdPVChfZW5kX29mX3ZlY3RvcnMpCisKKwlsaQlyOSwgMHgxMDAJLyogcmVzZXQgdmVjdG9yIGFsd2F5cyBhdCAweDEwMCAqLworCisJY21wbHcJMCwgcjcsIHI4CisJYmdlbHIJCQkvKiByZXR1cm4gaWYgcjc+PXI4IC0ganVzdCBpbiBjYXNlICovCisKKwltZmxyCXI0CQkvKiBzYXZlIGxpbmsgcmVnaXN0ZXIgKi8KKzE6CisJbHd6CXIwLCAwKHI3KQorCXN0dwlyMCwgMChyOSkKKwlhZGRpCXI3LCByNywgNAorCWFkZGkJcjksIHI5LCA0CisJY21wbHcJMCwgcjcsIHI4CisJYm5lCTFiCisKKwkvKgorCSAqIHJlbG9jYXRlIGBoZGxyJyBhbmQgYGludF9yZXR1cm4nIGVudHJpZXMKKwkgKi8KKwlsaQlyNywgLkxfTWFjaGluZUNoZWNrIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwlsaQlyOCwgQWxpZ25tZW50IC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKzI6CisJYmwJdHJhcF9yZWxvYworCWFkZGkJcjcsIHI3LCAweDEwMAkJLyogbmV4dCBleGNlcHRpb24gdmVjdG9yICovCisJY21wbHcJMCwgcjcsIHI4CisJYmx0CTJiCisKKwlsaQlyNywgLkxfQWxpZ25tZW50IC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwlibAl0cmFwX3JlbG9jCisKKwlsaQlyNywgLkxfUHJvZ3JhbUNoZWNrIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwlibAl0cmFwX3JlbG9jCisKKwlsaQlyNywgLkxfRlBVbmF2YWlsYWJsZSAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJbGkJcjgsIFN5c3RlbUNhbGwgLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorMzoKKwlibAl0cmFwX3JlbG9jCisJYWRkaQlyNywgcjcsIDB4MTAwCQkvKiBuZXh0IGV4Y2VwdGlvbiB2ZWN0b3IgKi8KKwljbXBsdwkwLCByNywgcjgKKwlibHQJM2IKKworCWxpCXI3LCAuTF9TaW5nbGVTdGVwIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwlsaQlyOCwgX2VuZF9vZl92ZWN0b3JzIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKzQ6CisJYmwJdHJhcF9yZWxvYworCWFkZGkJcjcsIHI3LCAweDEwMAkJLyogbmV4dCBleGNlcHRpb24gdmVjdG9yICovCisJY21wbHcJMCwgcjcsIHI4CisJYmx0CTRiCisKKwltZm1zcglyMwkJCS8qIG5vdyB0aGF0IHRoZSB2ZWN0b3JzIGhhdmUgKi8KKwlsaXMJcjcsIE1TUl9JUEBoCQkvKiByZWxvY2F0ZWQgaW50byBsb3cgbWVtb3J5ICovCisJb3JpCXI3LCByNywgTVNSX0lQQGwJLyogTVNSW0lQXSBjYW4gYmUgdHVybmVkIG9mZiAqLworCWFuZGMJcjMsIHIzLCByNwkJLyogKGlmIGl0IHdhcyBvbikgKi8KKwlTWU5DCQkJCS8qIFNvbWUgY2hpcCByZXZzIG5lZWQgdGhpcy4uLiAqLworCW10bXNyCXIzCisJU1lOQworCisJbXRscglyNAkJCS8qIHJlc3RvcmUgbGluayByZWdpc3RlciAgICAqLworCWJscgorCisJLyoKKwkgKiBGdW5jdGlvbjogcmVsb2NhdGUgZW50cmllcyBmb3Igb25lIGV4Y2VwdGlvbiB2ZWN0b3IKKwkgKi8KK3RyYXBfcmVsb2M6CisJbHd6CXIwLCAwKHI3KQkJLyogaGRsciAuLi4JCSovCisJYWRkCXIwLCByMCwgcjMJCS8qICAuLi4gKz0gZGVzdF9hZGRyCSovCisJc3R3CXIwLCAwKHI3KQorCisJbHd6CXIwLCA0KHI3KQkJLyogaW50X3JldHVybiAuLi4JKi8KKwlhZGQJcjAsIHIwLCByMwkJLyogIC4uLiArPSBkZXN0X2FkZHIJKi8KKwlzdHcJcjAsIDQocjcpCisKKwlibHIKKworI2lmZGVmIENGR19JTklUX1JBTV9MT0NLCisuZ2xvYmwgdW5sb2NrX3JhbV9pbl9jYWNoZQordW5sb2NrX3JhbV9pbl9jYWNoZToKKwkvKiBpbnZhbGlkYXRlIHRoZSBJTklUX1JBTSBzZWN0aW9uICovCisJbGlzCXIzLCAoQ0ZHX0lOSVRfUkFNX0FERFIgJiB+MzEpQGgKKwlvcmkJcjMsIHIzLCAoQ0ZHX0lOSVRfUkFNX0FERFIgJiB+MzEpQGwKKwlsaQlyMiw1MTIKKwltdGN0cglyMgorMToJaWNiaQlyMCwgcjMKKwlkY2JpCXIwLCByMworCWFkZGkJcjMsIHIzLCAzMgorCWJkbnoJMWIKKwlzeW5jCQkJLyogV2FpdCBmb3IgYWxsIGljYmkgdG8gY29tcGxldGUgb24gYnVzCSovCisJaXN5bmMKKwlibHIKKyNlbmRpZgorCittYXBfZmxhc2hfYnlfbGF3MToKKwkvKiBXaGVuIGJvb3RpbmcgZnJvbSBST00gKEZsYXNoIG9yIEVQUk9NKSwgY2xlYXIgdGhlICAqLworCS8qIEFkZHJlc3MgTWFzayBpbiBPUjAgc28gUk9NIGFwcGVhcnMgZXZlcnl3aGVyZSAgICAgICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsaXMJcjMsIChDRkdfSU1NUkJBUilAaCAgLyogcjMgPD0gQ0ZHX0lNTVJCQVIgICAgKi8KKwlsd3oJcjQsIE9SMEBsKHIzKQorCWxpCXI1LCAweDdmZmYgICAgICAgIC8qIHI1IDw9IDB4MDAwMDdGRkZGICovCisJYW5kCXI0LCByNCwgcjUKKwlzdHcJcjQsIE9SMEBsKHIzKSAgICAgLyogT1IwIDw9IE9SMCAmIDB4MDAwMDdGRkZGICovCisKKwkvKiBBcyBNUEM4MzQ5RSBVc2VyJ3MgTWFudWFsIHByZXNlbnRlZCwgd2hlbiBSQ1dbQk1TXSBpcyBzZXQgdG8gMCwKKwkgKiBzeXN0ZW0gd2lsbCBib290IGZyb20gMHgwMDAwXzAxMDAsIGFuZCB0aGUgTEJMQVdCQVIwW0JBU0VfQUREUl0KKwkgKiByZXNldCB2YWx1ZSBpcyAweDAwMDAwOyB3aGVuIFJDV1tCTVNdIGlzIHNldCB0byAxLCBzeXN0ZW0gd2lsbCBib290CisJICogZnJvbSAweEZGRjBfMDEwMCwgYW5kIHRoZSBMQkxBV0JBUjBbQkFTRV9BRERSXSByZXNldCB2YWx1ZSBpcworCSAqIDB4RkY4MDAuICBGcm9tIHRoZSBoYXJkIHJlc2V0dGluZyB0byBoZXJlLCB0aGUgcHJvY2Vzc29yIGZldGNoZWQgYW5kCisJICogZXhlY3V0ZWQgdGhlIGluc3RydWN0aW9ucyBvbmUgYnkgb25lLiAgVGhlcmUgaXMgbm90IGFic29sdXRlbHkKKwkgKiBqdW1waW5nIGhhcHBlbmVkLiAgTGF0ZXJseSwgdGhlIHUtYm9vdCBjb2RlIGhhcyB0byBkbyBhbiBhYnNvbHV0ZWx5CisJICoganVtcGluZyB0byB0ZWxsIHRoZSBDUFUgaW5zdHJ1Y3Rpb24gZmV0Y2hpbmcgY29tcG9uZW50IHdoYXQgdGhlCisJICogdS1ib290IFRFWFQgYmFzZSBhZGRyZXNzIGlzLiAgQmVjYXVzZSB0aGUgVEVYVCBiYXNlIHJlc2lkZXMgaW4gdGhlCisJICogYm9vdCBST00gbWVtb3J5IHNwYWNlLCB0byBnYXJhbnRlZSB0aGUgY29kZSBjYW4gcnVuIHNtb290aGx5IGFmdGVyCisJICogdGhhdCBqdW1waW5nLCB3ZSBtdXN0IG1hcCBpbiB0aGUgZW50aXJlIGJvb3QgUk9NIGJ5IExvY2FsIEFjY2VzcworCSAqIFdpbmRvdy4gIFNvbWV0aW1lcywgd2UgZGVzaXJlIGFuIG5vbi0weDAwMDAwIG9yIG5vbi0weEZGODAwIHN0YXJ0aW5nCisJICogYWRkcmVzcyBmb3IgYm9vdCBST00sIHN1Y2ggYXMgMHhGRTAwMDAwMC4gIEluIHRoaXMgY2FzZSwgdGhlIGRlZmF1bHQKKwkgKiBMQklVIExvY2FsIEFjY2VzcyBXaWRvdyAwIHdpbGwgbm90IGNvdmVyIHRoaXMgbWVtb3J5IHNwYWNlLiAgU28sIHdlCisJICogbmVlZCBhbm90aGVyIHdpbmRvdyB0byBtYXAgaW4gaXQuCisJICovCisJbGlzIHI0LCAoQ0ZHX0ZMQVNIX0JBU0UpQGgKKwlvcmkgcjQsIHI0LCAoQ0ZHX0ZMQVNIX0JBU0UpQGwKKwlzdHcgcjQsIExCTEFXQkFSMShyMykgLyogTEJMQVdCQVIxIDw9IENGR19GTEFTSF9CQVNFICovCisJbGlzIHI0LCAoMHg4MDAwMDAxNilAaAorCW9yaSByNCwgcjQsICgweDgwMDAwMDE2KUBsCisJc3R3IHI0LCBMQkxBV0FSMShyMykgLyogTEJMQVdBUjEgPD0gOE1CIEZsYXNoIFNpemUgKi8KKwlibHIKKworCS8qIFRob3VnaCBhbGwgdGhlIExCSVUgTG9jYWwgQWNjZXNzIFdpbmRvd3MgYW5kIExCQyBCYW5rcyB3aWxsIGJlCisJICogaW5pdGlhbGl6ZWQgaW4gdGhlIEMgY29kZSwgd2UnZCBiZXR0ZXIgY29uZmlndXJlIGJvb3QgUk9NJ3MKKwkgKiB3aW5kb3cgMCBhbmQgYmFuayAwIGNvcnJlY3RseSBhdCBoZXJlLgorCSAqLworcmVtYXBfZmxhc2hfYnlfbGF3MDoKKwkvKiBJbml0aWFsaXplIHRoZSBCUjAgd2l0aCB0aGUgYm9vdCBST00gc3RhcnRpbmcgYWRkcmVzcy4gKi8KKwlsd3ogcjQsIEJSMChyMykKKwlsaSAgcjUsIDB4N0ZGRgorCWFuZCByNCwgcjQsIHI1CisJbGlzIHI1LCAoQ0ZHX0ZMQVNIX0JBU0UgJiAweEZGRkY4MDAwKUBoCisJb3JpIHI1LCByNSwgKENGR19GTEFTSF9CQVNFICYgMHhGRkZGODAwMClAbAorCW9yICByNSwgcjUsIHI0CisJc3R3IHI1LCBCUjAocjMpIC8qIHI1IDw9IChDRkdfRkxBU0hfQkFTRSAmIDB4RkZGRjgwMDApIHwgKEJSMCAmIDB4MDAwMDdGRkYpICovCisKKwlsd3ogcjQsIE9SMChyMykKKwlsaXMgcjUsIDB4RkY4MCAvKiA4TSAqLworCW9yIHI0LCByNCwgcjUKKwlzdHcgcjQsIE9SMChyMykgLyogT1IwIDw9IE9SMCB8IDB4RkY4MDAwMDAgKi8KKworCWxpcyByNCwgKENGR19GTEFTSF9CQVNFKUBoCisJb3JpIHI0LCByNCwgKENGR19GTEFTSF9CQVNFKUBsCisJc3R3IHI0LCBMQkxBV0JBUjAocjMpIC8qIExCTEFXQkFSMCA8PSBDRkdfRkxBU0hfQkFTRSAqLworCisJbGlzIHI0LCAoMHg4MDAwMDAxNilAaAorCW9yaSByNCwgcjQsICgweDgwMDAwMDE2KUBsCisJc3R3IHI0LCBMQkxBV0FSMChyMykgLyogTEJMQVdBUjAgPD0gOE1CIEZsYXNoIFNpemUgKi8KKworCXhvciByNCwgcjQsIHI0CisJc3R3IHI0LCBMQkxBV0JBUjEocjMpCisJc3R3IHI0LCBMQkxBV0FSMShyMykgLyogT2ZmIExCSVUgTEFXMSAqLworCWJscgorCitzZXR1cF9zdGFja19pbl9kYXRhX2NhY2hlX29uX3IxOgorCWxpcyByMywgKENGR19JTU1SQkFSKUBoCisKKwkvKiBzZXR1cCBELUJBVCBmb3IgdGhlIEQtQ2FjaGUgKHdpdGggb3V0IHJlYWwgbWVtb3J5IGJhY2t1cCkgKi8KKworCWxpcyByNCwgKENGR19JTklUX1JBTV9BRERSICYgMHhGRkZFMDAwMClAaAorCW10c3ByCURCQVQwVSwgcjQKKwlvcmkgcjQsIHI0LCAweDAwMDIKKwltdHNwcglEQkFUMEwsIHI0CisJaXN5bmMKKworI2lmIDAKKwkvKiBFbmFibGUgTU1VICovCisJbWZtc3IgcjQKKwlvcmkgcjQsIHI0LCAoTVNSX0RSIHwgTVNSX0lSKUBsCisJbXRtc3IgcjQKKyNlbmRpZgorCisJLyogRW5hYmxlIGFuZCBpbnZhbGlkYXRlIGRhdGEgY2FjaGUuICovCisJbWZzcHIJcjQsIEhJRDAKKwltcglyNSwgcjQKKwlvcmkJcjQsIHI0LCBISUQwX0RDRSB8IEhJRDBfRENJCisJb3JpCXI1LCByNSwgSElEMF9EQ0UKKwlzeW5jCisJbXRzcHIJSElEMCwgcjQKKwltdHNwcglISUQwLCByNQorCXN5bmMKKworCS8qIEFsbG9jYXRlIEluaXRpYWwgUkFNIGluIGRhdGEgY2FjaGUuKi8KKwlsaSAgcjAsIDAKKwlsaXMJcjQsIChDRkdfSU5JVF9SQU1fQUREUilAaAorCW9yaQlyNCwgcjQsIChDRkdfSU5JVF9SQU1fQUREUilAbAorCWxpCXI1LCAxMjgqOCAvKiAxMjgqOCozMj0zMktiICovCisJbXRjdHIJcjUKKzE6CisJZGNieglyMCwgcjQKKwlhZGRpCXI0LCByNCwgMzIKKwliZG56CTFiCisJaXN5bmMKKworCS8qIExvY2sgYWxsIHRoZSBELWNhY2hlLCBiYXNpY2FsbHkgbGVhdmluZyB0aGUgcmVzZXQgb2YgdGhlIHByb2dyYW0gd2l0aG91dCBkY2FjaGUgKi8KKwltZnNwcglyNCwgSElEMAorCW9yaQlyNCwgcjQsIChISUQwX0RMT0NLKUBsCisJc3luYworCW10c3ByCUhJRDAgLCByNAorCisJLyogc2V0dXAgdGhlIHN0YWNrIHBvaW50ZXIgaW4gcjEgKi8KKwlsaXMJcjEsIChDRkdfSU5JVF9SQU1fQUREUiArIENGR19HQkxfREFUQV9PRkZTRVQpQGgKKwlvcmkJcjEsIHIxLCAoQ0ZHX0lOSVRfUkFNX0FERFIgKyBDRkdfR0JMX0RBVEFfT0ZGU0VUKUBsCisJbGkJcjAsIDAJCSAgICAgICAgLyogTWFrZSByb29tIGZvciBzdGFjayBmcmFtZSBoZWFkZXIgYW5kCSovCisKKwlzdHd1CXIwLCAtNChyMSkJCS8qIGNsZWFyIGZpbmFsIHN0YWNrIGZyYW1lIHNvIHRoYXQJKi8KKwlzdHd1CXIwLCAtNChyMSkJCS8qIHN0YWNrIGJhY2t0cmFjZXMgdGVybWluYXRlIGNsZWFubHkJKi8KKworCWJscgorCit1bl9zZXR1cF9zdGFja19pbl9kYXRhX2NhY2hlOgorCWJscgorCW1yIHIxNCwgcjQKKwltciByMTUsIHI1CisKKworCWxpcyByNCwgKENGR19JTklUX1JBTV9BRERSICYgMHhGRkZFMDAwMClAaAorCW10c3ByCURCQVQwVSwgcjQKKwlvcmkgcjQsIHI0LCAweDAwMDIKKwltdHNwcglEQkFUMEwsIHI0CisJaXN5bmMKKworCS8qIHVuIGxvY2sgYWxsIHRoZSBELWNhY2hlICovCisJbWZzcHIJcjQsIEhJRDAKKwlsaXMgcjUsICh+KEhJRDBfRExPQ0spKUBoCisJb3JpCXI1LCByNSwgKH4oSElEMF9ETE9DSykpQGwKKwlhbmQgcjQsIHI0LCByNQorCXN5bmMKKwltdHNwcglISUQwICwgcjQKKworCS8qIFJlIC0gQWxsb2NhdGUgSW5pdGlhbCBSQU0gaW4gZGF0YSBjYWNoZS4qLworCWxpICByMCwgMAorCWxpcwlyNCwgKENGR19JTklUX1JBTV9BRERSKUBoCisJb3JpCXI0LCByNCwgKENGR19JTklUX1JBTV9BRERSKUBsCisJbGkJcjUsIDEyOCo4IC8qIDEyOCo4KjMyPTMyS2IgKi8KKwltdGN0cglyNQorMToKKwlkY2J6CXIwLCByNAorCWFkZGkJcjQsIHI0LCAzMgorCWJkbnoJMWIKKwlpc3luYworCisJbWZsciByMTYKKwlibCBkY2FjaGVfZGlzYWJsZQorCW10bHIgcjE2CisKKwlibHIKKworI2lmIDAKKyNkZWZpbmUgR1JFRU5fTElHSFQgMHgyQjBENDA0NgorI2RlZmluZSBSRURfTElHSFQgICAweDI1MEQ0MDQ2CisjZGVmaW5lIExJQl9DTlQgICAgIDB4NEZGRgorCisvKgorICogTGliIExpZ2h0CisgKi8KKworCS5nbG9ibCBsaWJsaWdodAorbGlibGlnaHQ6CisJbGlzCXIzLCBDRkdfSU1NUkJBUkBoCisJb3JpCXIzLCByMywgQ0ZHX0lNTVJCQVJAbAorCWxpIHI0LCAweDMwMDIKKwltdG1zciByNAorCXhvciByNCwgcjQsIHI0CisJbXRzcHIJSElEMCwgcjQKKwltdHNwcglISUQyLCByNAorCWxpcyByNCwgMHhGODAwMDAwMEBoCisJb3JpIHI0LCByNCwgMHhGODAwMDAwMEBsCisJc3R3IHI0LCBMQkxBV0JBUjEocjMpCisJbGlzIHI0LCAweDgwMDAwMDBFQGgKKwlvcmkgcjQsIHI0LCAweDgwMDAwMDBFQGwKKwlzdHcgcjQsIExCTEFXQVIxKHIzKQorCWxpcyByNCwgMHhGODAwMDgwMUBoCisJb3JpIHI0LCByNCwgMHhGODAwMDgwMUBsCisJc3R3IHI0LCBCUjEocjMpCisJbGlzIHI0LCAweEZGRkZFOGYwQGgKKwlvcmkgcjQsIHI0LCAweEZGRkZFOGYwQGwKKwlzdHcgcjQsIE9SMShyMykKKworCWxpcyByNCwgMHhGODAwMDAwMEBoCisJb3JpIHI0LCByNCwgMHhGODAwMDAwMEBsCisJbGlzIHI1LCBHUkVFTl9MSUdIVEBoCisJb3JpIHI1LCByNSwgR1JFRU5fTElHSFRAbAorCWxpcyByNiwgUkVEX0xJR0hUQGgKKwlvcmkgcjYsIHI2LCBSRURfTElHSFRAbAorCWxpcyByNywgTElCX0NOVEBoCisJb3JpIHI3LCByNywgTElCX0NOVEBsCisKKzE6CisJc3R3IHI1LCAwKHI0KQorCW10Y3RyIHI3CisyOgliZG56IDJiCisJc3R3IHI2LCAwKHI0KQorCW10Y3RyIHI3CiszOgliZG56IDNiCisJYiAxYgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L3RyYXBzLmMgYi9jcHUvbXBjODN4eC90cmFwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTU2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODN4eC90cmFwcy5jCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogbGludXgvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBDaGFuZ2UgbG9nOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk2ICBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKKyAqCisgKiBNb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQorICogYW5kIFBhdWwgTWFja2VycmFzIChwYXVsdXNAY3MuYW51LmVkdS5hdSkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogMjAwNTAxMDE6IEVyYW4gTGliZXJ0eSAobGliZXJ0eUBmcmVlc2NhbGUuY29tKQorICogICAgICAgICAgIEluaXRpYWwgZmlsZSBjcmVhdGluZyAocG9ydGluZyBmcm9tIDg1WFggJiA4MjYwKQorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBoYXJkd2FyZQorICogZXhjZXB0aW9ucworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9tcGM4MzQ5X3BjaS5oPgorCisvKiBSZXR1cm5zIDAgaWYgZXhjZXB0aW9uIG5vdCBmb3VuZCBhbmQgZml4dXAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgRU5EX09GX01FTQkoZ2QtPmJkLT5iaV9tZW1zdGFydCArIGdkLT5iZC0+YmlfbWVtc2l6ZSkKKworLyoKKyAqIFRyYXAgJiBFeGNlcHRpb24gc3VwcG9ydAorICovCisKK3ZvaWQKK3ByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nICpzcCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwlpbnQgY250ID0gMDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlwdXRzICgiQ2FsbCBiYWNrdHJhY2U6ICIpOworCXdoaWxlIChzcCkgeworCQlpZiAoKHVpbnQpc3AgPiBFTkRfT0ZfTUVNKQorCQkJYnJlYWs7CisKKwkJaSA9IHNwWzFdOworCQlpZiAoY250KysgJSA3ID09IDApCisJCQlwdXRjICgnXG4nKTsKKwkJcHJpbnRmKCIlMDhsWCAiLCBpKTsKKwkJaWYgKGNudCA+IDMyKSBicmVhazsKKwkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSpzcDsKKwl9CisJcHV0YyAoJ1xuJyk7Cit9CisKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlpbnQgaTsKKworCXByaW50ZigiTklQOiAlMDhsWCBYRVI6ICUwOGxYIExSOiAlMDhsWCBSRUdTOiAlcCBUUkFQOiAlMDRseCBEQVI6ICUwOGxYXG4iLAorCSAgICAgICByZWdzLT5uaXAsIHJlZ3MtPnhlciwgcmVncy0+bGluaywgcmVncywgcmVncy0+dHJhcCwgcmVncy0+ZGFyKTsKKwlwcmludGYoIk1TUjogJTA4bHggRUU6ICUwMXggUFI6ICUwMXggRlA6ICUwMXggTUU6ICUwMXggSVIvRFI6ICUwMXglMDF4XG4iLAorCSAgICAgICByZWdzLT5tc3IsIHJlZ3MtPm1zciZNU1JfRUUgPyAxIDogMCwgcmVncy0+bXNyJk1TUl9QUiA/IDEgOiAwLAorCSAgICAgICByZWdzLT5tc3IgJiBNU1JfRlAgPyAxIDogMCxyZWdzLT5tc3ImTVNSX01FID8gMSA6IDAsCisJICAgICAgIHJlZ3MtPm1zciZNU1JfSVIgPyAxIDogMCwKKwkgICAgICAgcmVncy0+bXNyJk1TUl9EUiA/IDEgOiAwKTsKKworCXB1dGMgKCdcbicpOworCWZvciAoaSA9IDA7ICBpIDwgMzI7ICBpKyspIHsKKwkJaWYgKChpICUgOCkgPT0gMCkgeworCQkJcHJpbnRmKCJHUFIlMDJkOiAiLCBpKTsKKwkJfQorCisJCXByaW50ZigiJTA4bFggIiwgcmVncy0+Z3ByW2ldKTsKKwkJaWYgKChpICUgOCkgPT0gNykgeworCQkJcHV0YyAoJ1xuJyk7CisJCX0KKwl9Cit9CisKKwordm9pZAorX2V4Y2VwdGlvbihpbnQgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNob3dfcmVncyhyZWdzKTsKKwlwcmludF9iYWNrdHJhY2UoKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5ncHJbMV0pOworCXBhbmljKCJFeGNlcHRpb24gaW4ga2VybmVsIHBjICVseCBzaWduYWwgJWQiLHJlZ3MtPm5pcCxzaWducik7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCit2b2lkIGR1bXBfcGNpICh2b2lkKQoreworLyoKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCXByaW50ZiAoIlBDSTogZXJyIHN0YXR1cyAleCBlcnIgbWFzayAleCBlcnIgY3RybCAleFxuIiwKKwkJbGUzMl90b19jcHUgKGltbWFwLT5pbV9wY2kucGNpX2VzciksCisJCWxlMzJfdG9fY3B1IChpbW1hcC0+aW1fcGNpLnBjaV9lbXIpLAorCQlsZTMyX3RvX2NwdSAoaW1tYXAtPmltX3BjaS5wY2lfZWNyKSk7CisJcHJpbnRmICgiICAgICBlcnJvciBhZGRyZXNzICV4IGVycm9yIGRhdGEgJXggY3RybCAleFxuIiwKKwkJbGUzMl90b19jcHUgKGltbWFwLT5pbV9wY2kucGNpX2VhY3IpLAorCQlsZTMyX3RvX2NwdSAoaW1tYXAtPmltX3BjaS5wY2lfZWRjciksCisJCWxlMzJfdG9fY3B1IChpbW1hcC0+aW1fcGNpLnBjaV9lY2NyKSk7CisqLworfQorI2VuZGlmCisKK3ZvaWQKK01hY2hpbmVDaGVja0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZpeHVwOworCisJLyogUHJvYmluZyBQQ0kgdXNpbmcgY29uZmlnIGN5Y2xlcyBjYXVzZSB0aGlzIGV4Y2VwdGlvbgorCSAqIHdoZW4gYSBkZXZpY2UgaXMgbm90IHByZXNlbnQuICBDYXRjaCBpdCBhbmQgcmV0dXJuIHRvCisJICogdGhlIFBDSSBleGNlcHRpb24gaGFuZGxlci4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUENJCisjaWYgMAorCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisjaWZkZWYgREVCVUcKKwlkdW1wX3BjaSgpOworI2VuZGlmCisJLyogY2xlYXIgdGhlIGVycm9yIGluIHRoZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlpZihpbW1hcC0+aW1fcGNpLnBjaV9lc3IgJiBjcHVfdG9fbGUzMihQQ0lfRVJST1JfUENJX05PX1JTUCkpIHsKKwkJaW1tYXAtPmltX3BjaS5wY2lfZXNyID0gY3B1X3RvX2xlMzIoUENJX0VSUk9SX1BDSV9OT19SU1ApOworCQlyZXR1cm47CisJfQorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCWlmICgoZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlKHJlZ3MtPm5pcCkpICE9IDApIHsKKwkJcmVncy0+bmlwID0gZml4dXA7CisJCXJldHVybjsKKwl9CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKShyZWdzKSkKKwkJcmV0dXJuOworI2VuZGlmCisKKwlwdXRzICgiTWFjaGluZSBjaGVjayBpbiBrZXJuZWwgbW9kZS5cbiIKKwkJIkNhdXNlZCBieSAoZnJvbSBtc3IpOiAiKTsKKwlwcmludGYoInJlZ3MgJXAgIixyZWdzKTsKKwlzd2l0Y2goIHJlZ3MtPm1zciAmIDB4MDAwRjAwMDApIHsKKwljYXNlICgweDgwMDAwMDAwPj4xMik6CisJCXB1dHMgKCJNYWNoaW5lIGNoZWNrIHNpZ25hbCAtIHByb2JhYmx5IGR1ZSB0byBtbSBmYXVsdFxuIgorCQkJIndpdGggbW11IG9mZlxuIik7CisJCWJyZWFrOworCWNhc2UgKDB4ODAwMDAwMDA+PjEzKToKKwkJcHV0cyAoIlRyYW5zZmVyIGVycm9yIGFjayBzaWduYWxcbiIpOworCQlicmVhazsKKwljYXNlICgweDgwMDAwMDAwPj4xNCk6CisJCXB1dHMgKCJEYXRhIHBhcml0eSBzaWduYWxcbiIpOworCQlicmVhazsKKwljYXNlICgweDgwMDAwMDAwPj4xNSk6CisJCXB1dHMgKCJBZGRyZXNzIHBhcml0eSBzaWduYWxcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwdXRzICgiVW5rbm93biB2YWx1ZXMgaW4gbXNyXG4iKTsKKwl9CisJc2hvd19yZWdzKHJlZ3MpOworCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CisjaWZkZWYgQ09ORklHX1BDSQorCWR1bXBfcGNpKCk7CisjZW5kaWYKKwlwYW5pYygibWFjaGluZSBjaGVjayIpOworfQorCit2b2lkCitBbGlnbm1lbnRFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKwlpZiAoZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIgJiYgKCpkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlcikocmVncykpCisJCXJldHVybjsKKyNlbmRpZgorCXNob3dfcmVncyhyZWdzKTsKKwlwcmludF9iYWNrdHJhY2UoKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5ncHJbMV0pOworCXBhbmljKCJBbGlnbm1lbnQgRXhjZXB0aW9uIik7Cit9CisKK3ZvaWQKK1Byb2dyYW1DaGVja0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKShyZWdzKSkKKwkJcmV0dXJuOworI2VuZGlmCisJc2hvd19yZWdzKHJlZ3MpOworCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CisJcGFuaWMoIlByb2dyYW0gQ2hlY2sgRXhjZXB0aW9uIik7Cit9CisKK3ZvaWQKK1NvZnRFbXVFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKwlpZiAoZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIgJiYgKCpkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlcikocmVncykpCisJCXJldHVybjsKKyNlbmRpZgorCXNob3dfcmVncyhyZWdzKTsKKwlwcmludF9iYWNrdHJhY2UoKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5ncHJbMV0pOworCXBhbmljKCJTb2Z0d2FyZSBFbXVsYXRpb24gRXhjZXB0aW9uIik7Cit9CisKKwordm9pZAorVW5rbm93bkV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKShyZWdzKSkKKwkJcmV0dXJuOworI2VuZGlmCisJcHJpbnRmKCJCYWQgdHJhcCBhdCBQQzogJWx4LCBTUjogJWx4LCB2ZWN0b3I9JWx4XG4iLAorCSAgICAgICByZWdzLT5uaXAsIHJlZ3MtPm1zciwgcmVncy0+dHJhcCk7CisJX2V4Y2VwdGlvbigwLCByZWdzKTsKK30KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykKK2V4dGVybiB2b2lkIGRvX2JlZGJ1Z19icmVha3BvaW50KHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCisKK3ZvaWQKK0RlYnVnRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXByaW50ZigiRGVidWdnZXIgdHJhcCBhdCBAICVseFxuIiwgcmVncy0+bmlwICk7CisJc2hvd19yZWdzKHJlZ3MpOworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykKKwlkb19iZWRidWdfYnJlYWtwb2ludCggcmVncyApOworI2VuZGlmCit9CisKKy8qIFByb2JlIGFuIGFkZHJlc3MgYnkgcmVhZGluZy4gIElmIG5vdCBwcmVzZW50LCByZXR1cm4gLTEsIG90aGVyd2lzZQorICogcmV0dXJuIDAuCisgKi8KK2ludAorYWRkcl9wcm9iZSh1aW50ICphZGRyKQoreworI2lmIDAKKwlpbnQJcmV0dmFsOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAorCQkiMToJbHd6ICUwLDAoJTEpXG4iCQlcCisJCSIJZWllaW9cbiIJCVwKKwkJIglsaSAlMCwwXG4iCQlcCisJCSIyOlxuIgkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKKwkJIjM6CWxpICUwLC0xXG4iCQlcCisJCSIJYiAyYlxuIgkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJXAorCQkiCS5hbGlnbiAyXG4iCQlcCisJCSIJLmxvbmcgMWIsM2JcbiIJCVwKKwkJIi50ZXh0IgkJCQlcCisJCTogIj1yIiAocmV0dmFsKSA6ICJyIihhZGRyKSk7CisKKwlyZXR1cm4gKHJldHZhbCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L01ha2VmaWxlIGIvY3B1L21wYzg1eHgvTWFrZWZpbGUKaW5kZXggOTk2OTE1ZS4uNTI5OGRjMSAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzg1eHgvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDcgQEAKIExJQgk9IGxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubyByZXNldHZlYy5vCi1DT0JKUwk9IHRyYXBzLm8gY3B1Lm8gY3B1X2luaXQubyBzcGVlZC5vIGludGVycnVwdHMubyB0c2VjLm8gXAorQ09CSlMJPSB0cmFwcy5vIGNwdS5vIGNwdV9pbml0Lm8gc3BlZWQubyBpbnRlcnJ1cHRzLm8gXAogCSAgcGNpLm8gc2VyaWFsX3NjYy5vIGNvbW1wcm9jLm8gZXRoZXJfZmNjLm8gaTJjLm8gc3BkX3NkcmFtLm8KIE9CSlMJPSAkKENPQkpTKQogCmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9jb21tcHJvYy5jIGIvY3B1L21wYzg1eHgvY29tbXByb2MuYwppbmRleCBkZjExMDUyLi5hYThhNWE1IDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9jb21tcHJvYy5jCisrKyBiL2NwdS9tcGM4NXh4L2NvbW1wcm9jLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vY3BtXzg1eHguaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NjApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKIC8qCiAgKiBiZWNhdXNlIHdlIGhhdmUgc3RhY2sgYW5kIGluaXQgZGF0YSBpbiBkdWFsIHBvcnQgcmFtCiAgKiB3ZSBtdXN0IHJlZHVjZSB0aGUgc2l6ZQpAQCAtMjExLDQgKzIxMSw0IEBACiAKICNlbmRpZgkvKiBDT05GSUdfUE9TVCAqLwogCi0jZW5kaWYgLyogQ09ORklHX01QQzg1NjAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvY3B1LmMgYi9jcHUvbXBjODV4eC9jcHUuYwppbmRleCA0YTFjY2IwLi5mN2ZlMjJlIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9jcHUuYworKysgYi9jcHUvbXBjODV4eC9jcHUuYwpAQCAtMzgsNiArMzgsNyBAQAogCXVpbnQgbGNycjsJCS8qIGxvY2FsIGJ1cyBjbG9jayByYXRpbyByZWdpc3RlciAqLwogCXVpbnQgY2xrZGl2OwkJLyogY2xvY2sgZGl2aWRlciBwb3J0aW9uIG9mIGxjcnIgKi8KIAl1aW50IHB2ciwgc3ZyOworCXVpbnQgZmFtOwogCXVpbnQgdmVyOwogCXVpbnQgbWFqb3IsIG1pbm9yOwogCkBAIC02MCw2ICs2MSwxMiBAQAogCWNhc2UgU1ZSXzg1NjA6CiAJCXB1dHMoIjg1NjAiKTsKIAkJYnJlYWs7CisJY2FzZSBTVlJfODU0ODoKKwkJcHV0cygiODU0OCIpOworCQlicmVhazsKKwljYXNlIFNWUl84NTQ4X0U6CisJCXB1dHMoIjg1NDhfRSIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwdXRzKCJVbmtub3duIik7CiAJCWJyZWFrOwpAQCAtNjcsMTMgKzc0LDE0IEBACiAJcHJpbnRmKCIsIFZlcnNpb246ICVkLiVkLCAoMHglMDh4KVxuIiwgbWFqb3IsIG1pbm9yLCBzdnIpOwogCiAJcHZyID0gZ2V0X3B2cigpOworCWZhbSA9IFBWUl9GQU0ocHZyKTsKIAl2ZXIgPSBQVlJfVkVSKHB2cik7CiAJbWFqb3IgPSBQVlJfTUFKKHB2cik7CiAJbWlub3IgPSBQVlJfTUlOKHB2cik7CiAKIAlwcmludGYoIkNvcmU6ICAiKTsKLQlzd2l0Y2ggKHZlcikgewotCWNhc2UgUFZSX1ZFUihQVlJfODV4eCk6CisJc3dpdGNoIChmYW0pIHsKKwljYXNlIFBWUl9GQU0oUFZSXzg1eHgpOgogCSAgICBwdXRzKCJFNTAwIik7CiAJICAgIGJyZWFrOwogCWRlZmF1bHQ6CkBAIC04NCw3ICs5Miw3IEBACiAKIAlnZXRfc3lzX2luZm8oJnN5c2luZm8pOwogCi0JcHV0cygiQ2xvY2tzIENvbmZpZ3VyYXRpb246XG4iKTsKKwlwdXRzKCJDbG9jayBDb25maWd1cmF0aW9uOlxuIik7CiAJcHJpbnRmKCIgICAgICAgQ1BVOiU0bHUgTUh6LCAiLCBzeXNpbmZvLmZyZXFQcm9jZXNzb3IgLyAxMDAwMDAwKTsKIAlwcmludGYoIkNDQjolNGx1IE1IeixcbiIsIHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDEwMDAwMDApOwogCXByaW50ZigiICAgICAgIEREUjolNGx1IE1IeiwgIiwgc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMjAwMDAwMCk7CkBAIC0xMDEsNiArMTA5LDEzIEBACiAjZW5kaWYKIAljbGtkaXYgPSBsY3JyICYgMHgwZjsKIAlpZiAoY2xrZGl2ID09IDIgfHwgY2xrZGl2ID09IDQgfHwgY2xrZGl2ID09IDgpIHsKKyNpZmRlZiBDT05GSUdfTVBDODU0OAorCQkvKgorCQkgKiBZZXMsIHRoZSBlbnRpcmUgUFEzOCBmYW1pbHkgdXNlIHRoZSBzYW1lCisJCSAqIGJpdC1yZXByZXNlbnRhdGlvbiBmb3IgdHdpY2UgdGhlIGNsb2NrIGRpdmlkZXIgdmFsdWVzLgorCQkgKi8KKwkJIGNsa2RpdiAqPSAyOworI2VuZGlmCiAJCXByaW50ZigiTEJDOiU0bHUgTUh6XG4iLAogCQkgICAgICAgc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMTAwMDAwMCAvIGNsa2Rpdik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMgYi9jcHUvbXBjODV4eC9jcHVfaW5pdC5jCmluZGV4IGVlMmY3OWYuLmVmZGU5Y2MgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzg1eHgvY3B1X2luaXQuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGlvcG9ydHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2lmZGVmIENPTkZJR19NUEM4NTYwCisjaWZkZWYgQ09ORklHX0NQTTIKIHN0YXRpYyB2b2lkIGNvbmZpZ184NTYwX2lvcG9ydHMgKHZvbGF0aWxlIGltbWFwX3QgKiBpbW1yKQogewogCWludCBwb3J0bnVtOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJbWVtc2V0ICgodm9pZCAqKSBnZCwgMCwgc2l6ZW9mIChnZF90KSk7CiAKIAotI2lmZGVmIENPTkZJR19NUEM4NTYwCisjaWZkZWYgQ09ORklHX0NQTTIKIAljb25maWdfODU2MF9pb3BvcnRzKGltbWFwKTsKICNlbmRpZgogCkBAIC0xNzMsMzIgKzE3Myw2MyBAQAogCW1lbWN0bC0+YnI3ID0gQ0ZHX0JSN19QUkVMSU07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NjApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKIAltODU2MF9jcG1fcmVzZXQoKTsKICNlbmRpZgogfQogCisKIC8qCi0gKiBXZSBpbml0aWFsaXplIEwyIGFzIGNhY2hlIGhlcmUuCisgKiBJbml0aWFsaXplIEwyIGFzIGNhY2hlLgorICoKKyAqIFRoZSBuZXdlciA4NTQ4LCBldGMsIHBhcnRzIGhhdmUgdHdpY2UgYXMgbXVjaCBjYWNoZSwgYnV0CisgKiB1c2UgdGhlIHNhbWUgYml0LWVuY29kaW5nIGFzIHRoZSBvbGRlciA4NTU1LCBldGMsIHBhcnRzLgorICoKKyAqIEZJWE1FOiBVc2UgUFZSX1ZFUihwdnIpID09IDEgdGVzdCBoZXJlIGluc3RlYWQgb2YgU1ZSX1ZFUigpPwogICovCi1pbnQgY3B1X2luaXRfciAodm9pZCkKKworaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19MMl9DQUNIRSkKLQl2b2xhdGlsZSBpbW1hcF90ICAgICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNjc3JfbDJjYWNoZV90ICpsMmNhY2hlID0gJmltbWFwLT5pbV9sMmNhY2hlOwotCXZvbGF0aWxlIHVpbnQgdGVtcDsKKwl2b2xhdGlsZSB1aW50IGNhY2hlX2N0bDsKKwl1aW50IHN2ciwgdmVyOworCisJc3ZyID0gZ2V0X3N2cigpOworCXZlciA9IFNWUl9WRVIoc3ZyKTsKIAogCWFzbSgibXN5bmM7aXN5bmMiKTsKKwljYWNoZV9jdGwgPSBsMmNhY2hlLT5sMmN0bDsKKworCXN3aXRjaCAoY2FjaGVfY3RsICYgMHgzMDAwMDAwMCkgeworCWNhc2UgMHgyMDAwMDAwMDoKKwkJaWYgKHZlciA9PSBTVlJfODU0OCB8fCB2ZXIgPT0gU1ZSXzg1NDhfRSkgeworCQkJcHJpbnRmICgiTDIgY2FjaGUgNTEyS0I6Iik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCJMMiBjYWNoZSAyNTZLQjoiKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MDAwMDAwMDA6CisJY2FzZSAweDEwMDAwMDAwOgorCWNhc2UgMHgzMDAwMDAwMDoKKwlkZWZhdWx0OgorCQlwcmludGYgKCJMMiBjYWNoZSB1bmtub3duIHNpemUgKDB4JTA4eClcbiIsIGNhY2hlX2N0bCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlhc20oIm1zeW5jO2lzeW5jIik7CiAJbDJjYWNoZS0+bDJjdGwgPSAweDY4MDAwMDAwOyAvKiBpbnZhbGlkYXRlICovCi0JdGVtcCA9IGwyY2FjaGUtPmwyY3RsOworCWNhY2hlX2N0bCA9IGwyY2FjaGUtPmwyY3RsOwogCWFzbSgibXN5bmM7aXN5bmMiKTsKKwogCWwyY2FjaGUtPmwyY3RsID0gMHhhODAwMDAwMDsgLyogZW5hYmxlIDI1NktCIEwyIGNhY2hlICovCi0JdGVtcCA9IGwyY2FjaGUtPmwyY3RsOworCWNhY2hlX2N0bCA9IGwyY2FjaGUtPmwyY3RsOwogCWFzbSgibXN5bmM7aXN5bmMiKTsKIAotCXByaW50ZigiTDI6ICAgIDI1NiBrQiBlbmFibGVkXG4iKTsKKwlwcmludGYoIiBlbmFibGVkXG4iKTsKICNlbHNlCi0JcHJpbnRmKCJMMjogICAgZGlzYWJsZWQuXG4iKTsKKwlwcmludGYoIkwyIGNhY2hlOiBkaXNhYmxlZFxuIik7CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvZXRoZXJfZmNjLmMgYi9jcHUvbXBjODV4eC9ldGhlcl9mY2MuYwppbmRleCAxMjJjYTg3Li5jYmJiM2E0IDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9ldGhlcl9mY2MuYworKysgYi9jcHUvbXBjODV4eC9ldGhlcl9mY2MuYwpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODU2MCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQogCiAjaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKSAmJiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ORVQpICYmIFwKIAlkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpCkBAIC00NTgsNCArNDU4LDQgQEAKIAogI2VuZGlmCS8qIENPTkZJR19FVEhFUl9PTl9GQ0MgJiYgQ0ZHX0NNRF9ORVQgJiYgQ09ORklHX05FVF9NVUxUSSAqLwogCi0jZW5kaWYgLyogQ09ORklHX01QQzg1NjAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc2VyaWFsX3NjYy5jIGIvY3B1L21wYzg1eHgvc2VyaWFsX3NjYy5jCmluZGV4IGVhODI3NjEuLmNmMDYwZDYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3NlcmlhbF9zY2MuYworKysgYi9jcHUvbXBjODV4eC9zZXJpYWxfc2NjLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vY3BtXzg1eHguaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NjApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKICNpZiBkZWZpbmVkKENPTkZJR19DT05TX09OX1NDQykKIAogI2lmIENPTkZJR19DT05TX0lOREVYID09IDEJLyogQ29uc29sZSBvbiBTQ0MxICovCkBAIC0yNzEsNCArMjcxLDQgQEAKIAogI2VuZGlmCS8qIENPTkZJR19DT05TX09OX1NDQyAqLwogCi0jZW5kaWYgLyogQ09ORklHX01QQzg1NjAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3BkX3NkcmFtLmMgYi9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYwppbmRleCA1YTFkYmUyLi5hZjk5MjgyIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYworKysgYi9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYwpAQCAtMjgsMTAgKzI4LDExIEBACiAjaW5jbHVkZSA8c3BkLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKLWV4dGVybiB2b2lkIGRtYV9pbml0ICh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKK2V4dGVybiB2b2lkIGRtYV9pbml0KHZvaWQpOwogZXh0ZXJuIHVpbnQgZG1hX2NoZWNrKHZvaWQpOwotZXh0ZXJuIGludCAgZG1hX3hmZXIgKHZvaWQgKmRlc3QsIHVpbnQgY291bnQsIHZvaWQgKnNyYyk7CitleHRlcm4gaW50IGRtYV94ZmVyKHZvaWQgKmRlc3QsIHVpbnQgY291bnQsIHZvaWQgKnNyYyk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TUERfRUVQUk9NCkBAIC00MCw2ICs0MSw5IEBACiAjZGVmaW5lIENGR19SRUFEX1NQRAlpMmNfcmVhZAogI2VuZGlmCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2V0dXBfbGF3c19hbmRfdGxicyh1bnNpZ25lZCBpbnQgbWVtc2l6ZSk7CisKKwogLyoKICAqIENvbnZlcnQgcGljb3NlY29uZHMgaW50byBjbG9jayBjeWNsZXMgKHJvdW5kaW5nIHVwIGlmIG5lZWRlZCkuCiAgKi8KQEAgLTU3LDMxMSArNjEsODI5IEBACiAJcmV0dXJuIGNsa3M7CiB9CiAKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgRGVuc2l0eSBvZiBlYWNoIFBoeXNpY2FsIFJhbmsuCisgKiBSZXR1cm5lZCBzaXplIGlzIGluIGJ5dGVzLgorICoKKyAqIFN0dWR5IHRoZXNlIHRhYmxlIGZyb20gQnl0ZSAzMSBvZiBKRURFQyBTUEQgU3BlYy4KKyAqCisgKgkJRERSIEkJRERSIElJCisgKglCaXQJU2l6ZQlTaXplCisgKgktLS0JLS0tLS0JLS0tLS0tCisgKgk3IGhpZ2gJNTEyTUIJNTEyTUIKKyAqCTYJMjU2TUIJMjU2TUIKKyAqCTUJMTI4TUIJMTI4TUIKKyAqCTQJIDY0TUIJIDE2R0IKKyAqCTMJIDMyTUIJICA4R0IKKyAqCTIJIDE2TUIJICA0R0IKKyAqCTEJICAyR0IJICAyR0IKKyAqCTAgbG93CSAgMUdCCSAgMUdCCisgKgorICogUmVvcmRlciBUYWJsZSB0byBiZSBsaW5lYXIgYnkgc3RyaXBwaW5nIHRoZSBib3R0b20KKyAqIDIgb3IgNSBiaXRzIG9mZiBhbmQgc2hpZnRpbmcgdGhlbSB1cCB0byB0aGUgdG9wLgorICovCisKK3Vuc2lnbmVkIGludAorY29tcHV0ZV9iYW5rc2l6ZSh1bnNpZ25lZCBpbnQgbWVtX3R5cGUsIHVuc2lnbmVkIGNoYXIgcm93X2RlbnMpCit7CisJdW5zaWduZWQgaW50IGJzaXplOworCisJaWYgKG1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikgeworCQkvKiBCb3R0b20gMiBiaXRzIHVwIHRvIHRoZSB0b3AuICovCisJCWJzaXplID0gKChyb3dfZGVucyA+PiAyKSB8ICgocm93X2RlbnMgJiAzKSA8PCA2KSkgPDwgMjQ7CisJCWRlYnVnKCJERFI6IEREUiBJIHJhbmsgZGVuc2l0eSA9IDB4JTA4eFxuIiwgYnNpemUpOworCX0gZWxzZSB7CisJCS8qIEJvdHRvbSA1IGJpdHMgdXAgdG8gdGhlIHRvcC4gKi8KKwkJYnNpemUgPSAoKHJvd19kZW5zID4+IDUpIHwgKChyb3dfZGVucyAmIDMxKSA8PCAzKSkgPDwgMjc7CisJCWRlYnVnKCJERFI6IEREUiBJSSByYW5rIGRlbnNpdHkgPSAweCUwOHhcbiIsIGJzaXplKTsKKwl9CisJcmV0dXJuIGJzaXplOworfQorCisKKy8qCisgKiBDb252ZXJ0IGEgdHdvLW5pYmJsZSBCQ0QgdmFsdWUgaW50byBhIGN5Y2xlIHRpbWUuCisgKiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgbmFuby1zZWNvbmRzLCBwaWNvcyBhcmUgcmV0dXJuZWQuCisgKgorICogVGhpcyBpbXBsZW1lbnRzIHRoZSB0YWJsZXMgZm9yIGJ5dGVzIDksIDIzIGFuZCAyNSBmb3IgYm90aAorICogRERSIEkgYW5kIElJLiAgTm8gYWxsb3dhbmNlIGZvciBkaXN0aW5ndWlzaGluZyB0aGUgaW52YWxpZAorICogZmllbGRzIGFic2VudCBmb3IgRERSIEkgeWV0IHByZXNlbnQgaW4gRERSIElJIGlzIG1hZGUuCisgKiAoVGhhdCBpcywgY3ljbGUgdGltZXMgb2YgLjI1LCAuMzMsIC42NiBhbmQgLjc1IG5zIGFyZQorICogYWxsb3dlZCBmb3IgYm90aCBERFIgSUkgYW5kIEkuKQorICovCisKIHVuc2lnbmVkIGludAotYmFua3NpemUodW5zaWduZWQgY2hhciByb3dfZGVucykKK2NvbnZlcnRfYmNkX3RlbnRoc190b19jeWNsZV90aW1lX3BzKHVuc2lnbmVkIGludCBzcGRfdmFsKQogewotCXJldHVybiAoKHJvd19kZW5zID4+IDIpIHwgKChyb3dfZGVucyAmIDMpIDw8IDYpKSA8PCAyNDsKKwkvKgorCSAqIFRhYmxlIGxvb2sgdXAgdGhlIGxvd2VyIG5pYmJsZSwgYWxsb3cgRERSIEkgJiBJSS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdGVudGhzX3BzWzE2XSA9IHsKKwkJMCwKKwkJMTAwLAorCQkyMDAsCisJCTMwMCwKKwkJNDAwLAorCQk1MDAsCisJCTYwMCwKKwkJNzAwLAorCQk4MDAsCisJCTkwMCwKKwkJMjUwLAorCQkzMzAsCS8qIEZJWE1FOiBJcyAzMzMgYmV0dGVyL3ZhbGlkPyAqLworCQk2NjAsCS8qIEZJWE1FOiBJcyA2NjcgYmV0dGVyL3ZhbGlkPyAqLworCQk3NTAsCisJCTAsCS8qIHVuZGVmaW5lZCAqLworCQkwCS8qIHVuZGVmaW5lZCAqLworCX07CisKKwl1bnNpZ25lZCBpbnQgd2hvbGVfbnMgPSAoc3BkX3ZhbCAmIDB4RjApID4+IDQ7CisJdW5zaWduZWQgaW50IHRlbnRoX25zID0gc3BkX3ZhbCAmIDB4MEY7CisJdW5zaWduZWQgaW50IHBzID0gd2hvbGVfbnMgKiAxMDAwICsgdGVudGhzX3BzW3RlbnRoX25zXTsKKworCXJldHVybiBwczsKIH0KIAorCiBsb25nIGludAogc3BkX3NkcmFtKHZvaWQpCiB7CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkciA9ICZpbW1hcC0+aW1fZGRyOwotCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICZpbW1hcC0+aW1fbG9jYWxfZWNtOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwogCXNwZF9lZXByb21fdCBzcGQ7Ci0JdW5zaWduZWQgdG1wLCB0bXAxOworCXVuc2lnbmVkIGludCBuX3JhbmtzOworCXVuc2lnbmVkIGludCByYW5rX2RlbnNpdHk7CisJdW5zaWduZWQgaW50IG9kdF9yZF9jZmcsIG9kdF93cl9jZmc7CisJdW5zaWduZWQgaW50IG9kdF9jZmcsIG1vZGVfb2R0X2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgZHFzX2NmZzsKKwl1bnNpZ25lZCBjaGFyIHR3cl9jbGssIHR3dHJfY2xrLCB0d3JfYXV0b19jbGs7CisJdW5zaWduZWQgaW50IHRDS21pbl9wcywgdENLbWF4X3BzOworCXVuc2lnbmVkIGludCBtYXhfZGF0YV9yYXRlLCBlZmZlY3RpdmVfZGF0YV9yYXRlOworCXVuc2lnbmVkIGludCBidXNmcmVxOworCXVuc2lnbmVkIHNkcmFtX2NmZzsKIAl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKLQl1bnNpZ25lZCBpbnQgdGxiX3NpemU7Ci0JdW5zaWduZWQgaW50IGxhd19zaXplOwotCXVuc2lnbmVkIGNoYXIgY2FzbGF0OwotCXVuc2lnbmVkIGludCByYW1fdGxiX2luZGV4OwotCXVuc2lnbmVkIGludCByYW1fdGxiX2FkZHJlc3M7CisJdW5zaWduZWQgY2hhciBjYXNsYXQsIGNhc2xhdF9jdHJsOworCXVuc2lnbmVkIGludCB0cmZjLCB0cmZjX2NsaywgdHJmY19sb3csIHRyZmNfaGlnaDsKKwl1bnNpZ25lZCBpbnQgdHJjZF9jbGs7CisJdW5zaWduZWQgaW50IHRydHBfY2xrOworCXVuc2lnbmVkIGNoYXIgY2tlX21pbl9jbGs7CisJdW5zaWduZWQgY2hhciBhZGRfbGF0OworCXVuc2lnbmVkIGNoYXIgd3JfbGF0OworCXVuc2lnbmVkIGNoYXIgd3JfZGF0YV9kZWxheTsKKwl1bnNpZ25lZCBjaGFyIGZvdXJfYWN0OworCXVuc2lnbmVkIGNoYXIgY3BvOworCXVuc2lnbmVkIGNoYXIgYnVyc3RfbGVuOworCXVuc2lnbmVkIGludCBtb2RlX2Nhc2xhdDsKKwl1bnNpZ25lZCBjaGFyIHNkcmFtX3R5cGU7CisJdW5zaWduZWQgY2hhciBkX2luaXQ7CiAKLQlDRkdfUkVBRF9TUEQoU1BEX0VFUFJPTV9BRERSRVNTLCAwLCAxLCAodWNoYXIgKikgJiBzcGQsIHNpemVvZiAoc3BkKSk7CisJLyoKKwkgKiBSZWFkIFNQRCBpbmZvcm1hdGlvbi4KKwkgKi8KKwlDRkdfUkVBRF9TUEQoU1BEX0VFUFJPTV9BRERSRVNTLCAwLCAxLCAodWNoYXIgKikgJnNwZCwgc2l6ZW9mKHNwZCkpOwogCi0JaWYgKHNwZC5ucm93cyA+IDIpIHsKLQkJcHV0cygiRERSOk9ubHkgdHdvIGNoaXAgc2VsZWN0cyBhcmUgc3VwcG9ydGVkIG9uIEFEUy5cbiIpOworCS8qCisJICogQ2hlY2sgZm9yIHN1cHBvcnRlZCBtZW1vcnkgbW9kdWxlIHR5cGVzLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgIT0gU1BEX01FTVRZUEVfRERSICYmCisJICAgIHNwZC5tZW1fdHlwZSAhPSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCXByaW50ZigiVW5hYmxlIHRvIGxvY2F0ZSBERFIgSSBvciBERFIgSUkgbW9kdWxlLlxuIgorCQkgICAgICAgIiAgICBGdW5kYW1lbnRhbCBtZW1vcnkgdHlwZSBpcyAweCUweFxuIiwKKwkJICAgICAgIHNwZC5tZW1fdHlwZSk7CiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogVGhlc2UgdGVzdCBnbG9zcyBvdmVyIEREUiBJIGFuZCBJSSBkaWZmZXJlbmNlcyBpbiBpbnRlcnByZXRhdGlvbgorCSAqIG9mIGJ5dGVzIDMgYW5kIDQsIGJ1dCBpcnJlbGV2YW50bHkuICBNdWx0aXBsZSBhc3ltbWV0cmljIGJhbmtzCisJICogYXJlIG5vdCBzdXBwb3J0ZWQgb24gRERSIEk7IGFuZCBub3QgZW5jb2RlZCBvbiBERFIgSUkuCisJICoKKwkgKiBBbHNvIG5vdGUgdGhhdCB0aGUgODU0OCBjb250cm9sbGVyIGNhbiBzdXBwb3J0OgorCSAqICAgIDEyIDw9IG5yb3cgPD0gMTYKKwkgKiBhbmQKKwkgKiAgICAgOCA8PSBuY29sIDw9IDExIChzdGlsbCwgZm9yIEREUikKKwkgKiAgICAgNiA8PSBuY29sIDw9ICA5IChmb3IgRkNSQU0pCisJICovCisJaWYgKHNwZC5ucm93X2FkZHIgPCAxMiB8fCBzcGQubnJvd19hZGRyID4gMTQpIHsKKwkJcHJpbnRmKCJERFI6IFVuc3VwcG9ydGVkIG51bWJlciBvZiBSb3cgQWRkciBsaW5lczogJWQuXG4iLAorCQkgICAgICAgc3BkLm5yb3dfYWRkcik7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3BkLm5jb2xfYWRkciA8IDggfHwgc3BkLm5jb2xfYWRkciA+IDExKSB7CisJCXByaW50ZigiRERSOiBVbnN1cHBvcnRlZCBudW1iZXIgb2YgQ29sdW1uIEFkZHIgbGluZXM6ICVkLlxuIiwKKwkJICAgICAgIHNwZC5uY29sX2FkZHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIGJhbmtzIGNvbnRyb2xsZWQgYnkKKwkgKiBkaWZmZXJlbnQgQ2hpcCBTZWxlY3Qgc2lnbmFscy4gIFRoaXMgaXMgbm90IHF1aXRlIHRoZQorCSAqIHNhbWUgYXMgdGhlIG51bWJlciBvZiBESU1NIG1vZHVsZXMgb24gdGhlIGJvYXJkLiAgRmVoLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCW5fcmFua3MgPSBzcGQubnJvd3M7CisJfSBlbHNlIHsKKwkJbl9yYW5rcyA9IChzcGQubnJvd3MgJiAweDcpICsgMTsKKwl9CisKKwlkZWJ1ZygiRERSOiBudW1iZXIgb2YgcmFua3MgPSAlZFxuIiwgbl9yYW5rcyk7CisKLQlpZiAoc3BkLm5yb3dfYWRkciA8IDEyCi0JICAgIHx8IHNwZC5ucm93X2FkZHIgPiAxNAotCSAgICB8fCBzcGQubmNvbF9hZGRyIDwgOAotCSAgICB8fCBzcGQubmNvbF9hZGRyID4gMTEpIHsKLQkJcHV0cygiRERSOlJvdyBvciBDb2wgbnVtYmVyIHVuc3VwcG9ydGVkLlxuIik7CisJaWYgKG5fcmFua3MgPiAyKSB7CisJCXByaW50ZigiRERSOiBPbmx5IDIgY2hpcCBzZWxlY3RzIGFyZSBzdXBwb3J0ZWQ6ICVkXG4iLAorCQkgICAgICAgbl9yYW5rcyk7CiAJCXJldHVybiAwOwogCX0KIAotCWRkci0+Y3MwX2JuZHMgPSAoYmFua3NpemUoc3BkLnJvd19kZW5zKSA+PiAyNCkgLSAxOworCS8qCisJICogQWRqdXN0IEREUiBJSSBJTyB2b2x0YWdlIGJpYXNpbmcuICBJdCBqdXN0IG1ha2VzIGl0IHdvcmsuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCWd1ci0+ZGRyaW9vdmNyID0gKDAKKwkJCQkgIHwgMHg4MDAwMDAwMAkJLyogRW5hYmxlICovCisJCQkJICB8IDB4MTAwMDAwMDAJCS8qIFZTRUwgdG8gMS44ViAqLworCQkJCSAgKTsKKwl9CisKKwkvKgorCSAqIERldGVybWluZSB0aGUgc2l6ZSBvZiBlYWNoIFJhbmsgaW4gYnl0ZXMuCisJICovCisJcmFua19kZW5zaXR5ID0gY29tcHV0ZV9iYW5rc2l6ZShzcGQubWVtX3R5cGUsIHNwZC5yb3dfZGVucyk7CisKKworCS8qCisJICogRWc6IEJvdW5kczogMHgwMDAwXzAwMDAgdG8gMHgwZjAwMF8wMDAwCWZpcnN0IDI1NiBNZWcKKwkgKi8KKwlkZHItPmNzMF9ibmRzID0gKHJhbmtfZGVuc2l0eSA+PiAyNCkgLSAxOworCisJLyoKKwkgKiBPRFQgY29uZmlndXJhdGlvbiByZWNvbW1lbmRhdGlvbiBmcm9tIEREUiBDb250cm9sbGVyIENoYXB0ZXIuCisJICovCisJb2R0X3JkX2NmZyA9IDA7CQkJLyogTmV2ZXIgYXNzZXJ0IE9EVCAqLworCW9kdF93cl9jZmcgPSAwOwkJCS8qIE5ldmVyIGFzc2VydCBPRFQgKi8KKwlpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUjIpIHsKKwkJb2R0X3dyX2NmZyA9IDE7CQkvKiBBc3NlcnQgT0RUIG9uIHdyaXRlcyB0byBDUzAgKi8KKyNpZiAwCisJCS8qIEZJWE1FOiBIb3cgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZGltbSBtb2R1bGVzPyAqLworCQlpZiAobl9kaW1tX21vZHVsZXMgPT0gMikgeworCQkJb2R0X3JkX2NmZyA9IDE7CS8qIEFzc2VydCBPRFQgb24gcmVhZHMgdG8gQ1MwICovCisJCX0KKyNlbmRpZgorCX0KKwogCWRkci0+Y3MwX2NvbmZpZyA9ICggMSA8PCAzMQorCQkJICAgIHwgKG9kdF9yZF9jZmcgPDwgMjApCisJCQkgICAgfCAob2R0X3dyX2NmZyA8PCAxNikKIAkJCSAgICB8IChzcGQubnJvd19hZGRyIC0gMTIpIDw8IDgKIAkJCSAgICB8IChzcGQubmNvbF9hZGRyIC0gOCkgKTsKIAlkZWJ1ZygiXG4iKTsKLQlkZWJ1ZygiY3MwX2JuZHMgPSAweCUwOHhcbiIsZGRyLT5jczBfYm5kcyk7Ci0JZGVidWcoImNzMF9jb25maWcgPSAweCUwOHhcbiIsZGRyLT5jczBfY29uZmlnKTsKKwlkZWJ1ZygiRERSOiBjczBfYm5kcyAgID0gMHglMDh4XG4iLCBkZHItPmNzMF9ibmRzKTsKKwlkZWJ1ZygiRERSOiBjczBfY29uZmlnID0gMHglMDh4XG4iLCBkZHItPmNzMF9jb25maWcpOwogCi0JaWYgKHNwZC5ucm93cyA9PSAyKSB7Ci0JCWRkci0+Y3MxX2JuZHMgPSAoIChiYW5rc2l6ZShzcGQucm93X2RlbnMpID4+IDgpCi0JCQkJICB8ICgoYmFua3NpemUoc3BkLnJvd19kZW5zKSA+PiAyMykgLSAxKSApOworCWlmIChuX3JhbmtzID09IDIpIHsKKwkJLyoKKwkJICogRWc6IEJvdW5kczogMHgwZjAwXzAwMDAgdG8gMHgxZTAwMDBfMDAwMCwgc2Vjb25kIDI1NiBNZWcKKwkJICovCisJCWRkci0+Y3MxX2JuZHMgPSAoIChyYW5rX2RlbnNpdHkgPj4gOCkKKwkJCQkgIHwgKChyYW5rX2RlbnNpdHkgPj4gKDI0IC0gMSkpIC0gMSkgKTsKIAkJZGRyLT5jczFfY29uZmlnID0gKCAxPDwzMQotCQkJCSAgICB8IChzcGQubnJvd19hZGRyLTEyKSA8PCA4Ci0JCQkJICAgIHwgKHNwZC5uY29sX2FkZHItOCkgKTsKLQkJZGVidWcoImNzMV9ibmRzID0gMHglMDh4XG4iLGRkci0+Y3MxX2JuZHMpOwotCQlkZWJ1ZygiY3MxX2NvbmZpZyA9IDB4JTA4eFxuIixkZHItPmNzMV9jb25maWcpOworCQkJCSAgICB8IChvZHRfcmRfY2ZnIDw8IDIwKQorCQkJCSAgICB8IChvZHRfd3JfY2ZnIDw8IDE2KQorCQkJCSAgICB8IChzcGQubnJvd19hZGRyIC0gMTIpIDw8IDgKKwkJCQkgICAgfCAoc3BkLm5jb2xfYWRkciAtIDgpICk7CisJCWRlYnVnKCJERFI6IGNzMV9ibmRzICAgPSAweCUwOHhcbiIsIGRkci0+Y3MxX2JuZHMpOworCQlkZWJ1ZygiRERSOiBjczFfY29uZmlnID0gMHglMDh4XG4iLCBkZHItPmNzMV9jb25maWcpOwogCX0KIAorCisJLyoKKwkgKiBGaW5kIHRoZSBsYXJnZXN0IENBUyBieSBsb2NhdGluZyB0aGUgaGlnaGVzdCAxIGJpdAorCSAqIGluIHRoZSBzcGQuY2FzX2xhdCBmaWVsZC4gIFRyYW5zbGF0ZSBpdCB0byBhIEREUgorCSAqIGNvbnRyb2xsZXIgZmllbGQgdmFsdWU6CisJICoKKwkgKglDQVMgTGF0CUREUiBJCUREUiBJSQlDdHJsCisJICoJQ2xvY2tzCVNQRCBCaXQJU1BEIEJpdAlWYWx1ZQorCSAqCS0tLS0tLS0JLS0tLS0tLQktLS0tLS0tCS0tLS0tCisJICoJMS4wCTAJCTAwMDEKKwkgKgkxLjUJMQkJMDAxMAorCSAqCTIuMAkyCTIJMDAxMQorCSAqCTIuNQkzCQkwMTAwCisJICoJMy4wCTQJMwkwMTAxCisJICoJMy41CTUJCTAxMTAKKwkgKgk0LjAJCTQJMDExMQorCSAqCTQuNQkJCTEwMDAKKwkgKgk1LjAJCTUJMTAwMQorCSAqLworCWNhc2xhdCA9IF9faWxvZzIoc3BkLmNhc19sYXQpOworCWlmICgoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikKKwkgICAgJiYgKGNhc2xhdCA+IDUpKSB7CisJCXByaW50ZigiRERSIEk6IEludmFsaWQgU1BEIENBUyBMYXRlbmN5OiAweCV4LlxuIiwgc3BkLmNhc19sYXQpOworCQlyZXR1cm4gMDsKKwotCWlmIChzcGQubWVtX3R5cGUgIT0gMHgwNykgewotCQlwdXRzKCJObyBERFIgbW9kdWxlIGZvdW5kIVxuIik7CisJfSBlbHNlIGlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSMgorCQkgICAmJiAoY2FzbGF0IDwgMiB8fCBjYXNsYXQgPiA1KSkgeworCQlwcmludGYoIkREUiBJSTogSW52YWxpZCBTUEQgQ0FTIExhdGVuY3k6IDB4JXguXG4iLAorCQkgICAgICAgc3BkLmNhc19sYXQpOwogCQlyZXR1cm4gMDsKIAl9CisJZGVidWcoIkREUjogY2FzbGF0IFNQRCBiaXQgaXMgJWRcbiIsIGNhc2xhdCk7CiAKIAkvKgotCSAqIEZpZ3VyZSBvdXQgbWVtb3J5IHNpemUgaW4gTWVnYWJ5dGVzLgorCSAqIENhbGN1bGF0ZSB0aGUgTWF4aW11bSBEYXRhIFJhdGUgYmFzZWQgb24gdGhlIE1pbmltdW0gQ3ljbGUgdGltZS4KKwkgKiBUaGUgU1BEIGNsa19jeWNsZSBmaWVsZCAodENLbWluKSBpcyBtZWFzdXJlZCBpbiB0ZW50aHMgb2YKKwkgKiBuYW5vc2Vjb25kcyBhbmQgcmVwcmVzZW50ZWQgYXMgQkNELgogCSAqLwotCW1lbXNpemUgPSBzcGQubnJvd3MgKiBiYW5rc2l6ZShzcGQucm93X2RlbnMpIC8gMHgxMDAwMDA7CisJdENLbWluX3BzID0gY29udmVydF9iY2RfdGVudGhzX3RvX2N5Y2xlX3RpbWVfcHMoc3BkLmNsa19jeWNsZSk7CisJZGVidWcoIkREUjogdENLbWluID0gJWQgcHNcbiIsIHRDS21pbl9wcyk7CiAKIAkvKgotCSAqIEZpcnN0IHN1cHBvcnRlZCBMQVcgc2l6ZSBpcyAxNk0sIGF0IExBV0FSX1NJWkVfMTZNID09IDIzLiBGbm9yZC4KKwkgKiBEb3VibGUtZGF0YSByYXRlLCBzY2FsZWQgMTAwMCB0byBwaWNvc2Vjb25kcywgYW5kIGJhY2sgZG93biB0byBNSHouCiAJICovCi0JbGF3X3NpemUgPSAxOSArIF9faWxvZzIobWVtc2l6ZSk7CisJbWF4X2RhdGFfcmF0ZSA9IDIgKiAxMDAwICogMTAwMCAvIHRDS21pbl9wczsKKwlkZWJ1ZygiRERSOiBNb2R1bGUgbWF4IGRhdGEgcmF0ZSA9ICVkIE1oelxuIiwgbWF4X2RhdGFfcmF0ZSk7CisKIAogCS8qCi0JICogRGV0ZXJtaW5lIHNpemUgb2YgZWFjaCBUTEIxIGVudHJ5LgorCSAqIEFkanVzdCB0aGUgQ0FTIExhdGVuY3kgdG8gYWxsb3cgZm9yIGJ1cyBzcGVlZHMgdGhhdAorCSAqIGFyZSBzbG93ZXIgdGhhbiB0aGUgRERSIG1vZHVsZS4KIAkgKi8KLQlzd2l0Y2ggKG1lbXNpemUpIHsKLQljYXNlIDE2OgotCWNhc2UgMzI6Ci0JCXRsYl9zaXplID0gQk9PS0VfUEFHRVNaXzE2TTsKLQkJYnJlYWs7Ci0JY2FzZSA2NDoKLQljYXNlIDEyODoKLQkJdGxiX3NpemUgPSBCT09LRV9QQUdFU1pfNjRNOwotCQlicmVhazsKLQljYXNlIDI1NjoKLQljYXNlIDUxMjoKLQljYXNlIDEwMjQ6Ci0JY2FzZSAyMDQ4OgotCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl8yNTZNOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwdXRzKCJERFI6IG9ubHkgMTZNLDMyTSw2NE0sMTI4TSwyNTZNLDUxMk0sMUcgYW5kIDJHIEREUiBJIGFyZSBzdXBwb3J0ZWQuXG4iKTsKKwlidXNmcmVxID0gZ2V0X2J1c19mcmVxKDApIC8gMTAwMDAwMDsJLyogTUh6ICovCisKKwllZmZlY3RpdmVfZGF0YV9yYXRlID0gbWF4X2RhdGFfcmF0ZTsKKwlpZiAoYnVzZnJlcSA8IDkwKSB7CisJCS8qIEREUiByYXRlIG91dC1vZi1yYW5nZSAqLworCQlwdXRzKCJERFI6IHBsYXRmb3JtIGZyZXF1ZW5jeSBpcyBub3QgZml0IGZvciBERFIgcmF0ZVxuIik7CiAJCXJldHVybiAwOwotCQlicmVhazsKKworCX0gZWxzZSBpZiAoOTAgPD0gYnVzZnJlcSAmJiBidXNmcmVxIDwgMjMwICYmIG1heF9kYXRhX3JhdGUgPj0gMjMwKSB7CisJCS8qCisJCSAqIGJ1c2ZyZXEgOTB+MjMwIHJhbmdlLCB0cmVhdGVkIGFzIEREUiAyMDAuCisJCSAqLworCQllZmZlY3RpdmVfZGF0YV9yYXRlID0gMjAwOworCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHhhMCkJLyogMTAgbnMgKi8KKwkJCWNhc2xhdCAtPSAyOworCQllbHNlIGlmIChzcGQuY2xrX2N5Y2xlMiA9PSAweGEwKQorCQkJY2FzbGF0LS07CisKKwl9IGVsc2UgaWYgKDIzMCA8PSBidXNmcmVxICYmIGJ1c2ZyZXEgPCAyODAgJiYgbWF4X2RhdGFfcmF0ZSA+PSAyODApIHsKKwkJLyoKKwkJICogYnVzZnJlcSAyMzB+MjgwIHJhbmdlLCB0cmVhdGVkIGFzIEREUiAyNjYuCisJCSAqLworCQllZmZlY3RpdmVfZGF0YV9yYXRlID0gMjY2OworCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHg3NSkJLyogNy41IG5zICovCisJCQljYXNsYXQgLT0gMjsKKwkJZWxzZSBpZiAoc3BkLmNsa19jeWNsZTIgPT0gMHg3NSkKKwkJCWNhc2xhdC0tOworCisJfSBlbHNlIGlmICgyODAgPD0gYnVzZnJlcSAmJiBidXNmcmVxIDwgMzUwICYmIG1heF9kYXRhX3JhdGUgPj0gMzUwKSB7CisJCS8qCisJCSAqIGJ1c2ZyZXEgMjgwfjM1MCByYW5nZSwgdHJlYXRlZCBhcyBERFIgMzMzLgorCQkgKi8KKwkJZWZmZWN0aXZlX2RhdGFfcmF0ZSA9IDMzMzsKKwkJaWYgKHNwZC5jbGtfY3ljbGUzID09IDB4NjApCS8qIDYuMCBucyAqLworCQkJY2FzbGF0IC09IDI7CisJCWVsc2UgaWYgKHNwZC5jbGtfY3ljbGUyID09IDB4NjApCisJCQljYXNsYXQtLTsKKworCX0gZWxzZSBpZiAoMzUwIDw9IGJ1c2ZyZXEgJiYgYnVzZnJlcSA8IDQ2MCAmJiBtYXhfZGF0YV9yYXRlID49IDQ2MCkgeworCQkvKgorCQkgKiBidXNmcmVxIDM1MH40NjAgcmFuZ2UsIHRyZWF0ZWQgYXMgRERSIDQwMC4KKwkJICovCisJCWVmZmVjdGl2ZV9kYXRhX3JhdGUgPSA0MDA7CisJCWlmIChzcGQuY2xrX2N5Y2xlMyA9PSAweDUwKQkvKiA1LjAgbnMgKi8KKwkJCWNhc2xhdCAtPSAyOworCQllbHNlIGlmIChzcGQuY2xrX2N5Y2xlMiA9PSAweDUwKQorCQkJY2FzbGF0LS07CisKKwl9IGVsc2UgaWYgKDQ2MCA8PSBidXNmcmVxICYmIGJ1c2ZyZXEgPCA1NjAgJiYgbWF4X2RhdGFfcmF0ZSA+PSA1NjApIHsKKwkJLyoKKwkJICogYnVzZnJlcSA0NjB+NTYwIHJhbmdlLCB0cmVhdGVkIGFzIEREUiA1MzMuCisJCSAqLworCQllZmZlY3RpdmVfZGF0YV9yYXRlID0gNTMzOworCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHgzRCkJLyogMy43NSBucyAqLworCQkJY2FzbGF0IC09IDI7CisJCWVsc2UgaWYgKHNwZC5jbGtfY3ljbGUyID09IDB4M0QpCisJCQljYXNsYXQtLTsKKworCX0gZWxzZSBpZiAoNTYwIDw9IGJ1c2ZyZXEgJiYgYnVzZnJlcSA8IDcwMCAmJiBtYXhfZGF0YV9yYXRlID49IDcwMCkgeworCQkvKgorCQkgKiBidXNmcmVxIDU2MH43MDAgcmFuZ2UsIHRyZWF0ZWQgYXMgRERSIDY2Ny4KKwkJICovCisJCWVmZmVjdGl2ZV9kYXRhX3JhdGUgPSA2Njc7CisJCWlmIChzcGQuY2xrX2N5Y2xlMyA9PSAweDMwKQkvKiAzLjAgbnMgKi8KKwkJCWNhc2xhdCAtPSAyOworCQllbHNlIGlmIChzcGQuY2xrX2N5Y2xlMiA9PSAweDMwKQorCQkJY2FzbGF0LS07CisKKwl9IGVsc2UgaWYgKDcwMCA8PSBidXNmcmVxKSB7CisJCS8qCisJCSAqIEREUiByYXRlIG91dC1vZi1yYW5nZQorCQkgKi8KKwkJcHJpbnRmKCJERFI6IEJ1cyBmcmVxICVkIE1IeiBpcyBub3QgZml0IGZvciBERFIgcmF0ZSAlZCBNSHpcbiIsCisJCSAgICAgYnVzZnJlcSwgbWF4X2RhdGFfcmF0ZSk7CisJCXJldHVybiAwOwogCX0KIAorCiAJLyoKLQkgKiBDb25maWd1cmUgRERSIFRMQjEgZW50cmllcy4KLQkgKiBTdGFydGluZyBhdCBUTEIxIDgsIHVzZSBubyBtb3JlIHRoYW4gOCBUTEIxIGVudHJpZXMuCisJICogQ29udmVydCBjYXNsYXQgY2xvY2tzIHRvIEREUiBjb250cm9sbGVyIHZhbHVlLgorCSAqIEZvcmNlIGNhc2xhdF9jdHJsIHRvIGJlIEREUiBDb250cm9sbGVyIGZpZWxkLXNpemVkLgogCSAqLwotCXJhbV90bGJfaW5kZXggPSA4OwotCXJhbV90bGJfYWRkcmVzcyA9ICh1bnNpZ25lZCBpbnQpQ0ZHX0REUl9TRFJBTV9CQVNFOwotCXdoaWxlIChyYW1fdGxiX2FkZHJlc3MgPCAobWVtc2l6ZSAqIDEwMjQgKiAxMDI0KQotCSAgICAgICYmIHJhbV90bGJfaW5kZXggPCAxNikgewotCQltdHNwcihNQVMwLCBUTEIxX01BUzAoMSwgcmFtX3RsYl9pbmRleCwgMCkpOwotCQltdHNwcihNQVMxLCBUTEIxX01BUzEoMSwgMSwgMCwgMCwgdGxiX3NpemUpKTsKLQkJbXRzcHIoTUFTMiwgVExCMV9NQVMyKEU1MDBfVExCX0VQTihyYW1fdGxiX2FkZHJlc3MpLAotCQkJCSAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApKTsKLQkJbXRzcHIoTUFTMywgVExCMV9NQVMzKEU1MDBfVExCX1JQTihyYW1fdGxiX2FkZHJlc3MpLAotCQkJCSAgICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEpKTsKLQkJYXNtIHZvbGF0aWxlKCJpc3luYzttc3luYzt0bGJ3ZTtpc3luYyIpOworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCWNhc2xhdF9jdHJsID0gKGNhc2xhdCArIDEpICYgMHgwNzsKKwl9IGVsc2UgeworCQljYXNsYXRfY3RybCA9ICAoMiAqIGNhc2xhdCAtIDEpICYgMHgwZjsKKwl9CiAKLQkJZGVidWcoIkREUjpNQVMwPTB4JTA4eFxuIiwgVExCMV9NQVMwKDEsIHJhbV90bGJfaW5kZXgsIDApKTsKLQkJZGVidWcoIkREUjpNQVMxPTB4JTA4eFxuIiwgVExCMV9NQVMxKDEsIDEsIDAsIDAsIHRsYl9zaXplKSk7Ci0JCWRlYnVnKCJERFI6TUFTMj0weCUwOHhcbiIsCi0JCSAgICAgIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4ocmFtX3RsYl9hZGRyZXNzKSwKLQkJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSk7Ci0JCWRlYnVnKCJERFI6TUFTMz0weCUwOHhcbiIsCi0JCSAgICAgIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4ocmFtX3RsYl9hZGRyZXNzKSwKLQkJCQkwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAxKSk7CisJZGVidWcoIkREUjogZWZmZWN0aXZlIGRhdGEgcmF0ZSBpcyAlZCBNSHpcbiIsIGVmZmVjdGl2ZV9kYXRhX3JhdGUpOworCWRlYnVnKCJERFI6IGNhc2xhdCBTUEQgYml0IGlzICVkLCBjb250cm9sbGVyIGZpZWxkIGlzIDB4JXhcbiIsCisJICAgICAgY2FzbGF0LCBjYXNsYXRfY3RybCk7CiAKLQkJcmFtX3RsYl9hZGRyZXNzICs9ICgweDEwMDAgPDwgKCh0bGJfc2l6ZSAtIDEpICogMikpOwotCQlyYW1fdGxiX2luZGV4Kys7CisJLyoKKwkgKiBUaW1pbmcgQ29uZmlnIDAuCisJICogQXZvaWQgd3JpdGluZyBmb3IgRERSIEkuICBUaGUgbmV3IFBRMzggRERSIGNvbnRyb2xsZXIKKwkgKiBkcmVhbXMgdXAgbm9uLXplcm8gZGVmYXVsdCB2YWx1ZXMgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCXVuc2lnbmVkIGNoYXIgdGF4cGRfY2xrID0gODsJCS8qIEJ5IHRoZSBib29rLiAqLworCQl1bnNpZ25lZCBjaGFyIHRtcmRfY2xrID0gMjsJCS8qIEJ5IHRoZSBib29rLiAqLworCQl1bnNpZ25lZCBjaGFyIGFjdF9wZF9leGl0ID0gMjsJCS8qIEVtcGlyaWNhbD8gKi8KKwkJdW5zaWduZWQgY2hhciBwcmVfcGRfZXhpdCA9IDY7CQkvKiBFbXBpcmljYWw/ICovCisKKwkJZGRyLT50aW1pbmdfY2ZnXzAgPSAoMAorCQkJfCAoKGFjdF9wZF9leGl0ICYgMHg3KSA8PCAyMCkJLyogQUNUX1BEX0VYSVQgKi8KKwkJCXwgKChwcmVfcGRfZXhpdCAmIDB4NykgPDwgMTYpCS8qIFBSRV9QRF9FWElUICovCisJCQl8ICgodGF4cGRfY2xrICYgMHhmKSA8PCA4KQkvKiBPRFRfUERfRVhJVCAqLworCQkJfCAoKHRtcmRfY2xrICYgMHhmKSA8PCAwKQkvKiBNUlNfQ1lDICovCisJCQkpOworI2lmIDAKKwkJZGRyLT50aW1pbmdfY2ZnXzAgfD0gMHhhYTAwMDAwMDsJLyogZXh0cmEgY3ljbGVzICovCisjZW5kaWYKKwkJZGVidWcoIkREUjogdGltaW5nX2NmZ18wID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfMCk7CisKKwl9IGVsc2UgeworI2lmIDAKKwkJLyoKKwkJICogRm9yY2UgZXh0cmEgY3ljbGVzIHdpdGggMHhhYSBiaXRzLgorCQkgKiBJbmNpZGVudGFsbHkgc3VwcGx5IHRoZSBkcmVhbXQtdXAgYmFja3dhcmRzIGNvbXBhdCB2YWx1ZSEKKwkJICovCisJCWRkci0+dGltaW5nX2NmZ18wID0gMHgwMDExMDEwNTsJLyogYmFja3dhcmRzIGNvbXBhdCB2YWx1ZSAqLworCQlkZHItPnRpbWluZ19jZmdfMCB8PSAweGFhMDAwMDAwOwkvKiBleHRyYSBjeWNsZXMgKi8KKwkJZGVidWcoIkREUjogSEFDSyB0aW1pbmdfY2ZnXzAgPSAweCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ18wKTsKKyNlbmRpZgogCX0KIAorCiAJLyoKLQkgKiBTZXQgdXAgTEFXQkFSIGZvciBhbGwgb2YgRERSLgorCSAqIFNvbWUgVGltaW5nIENvbmZpZyAxIHZhbHVlcyBub3cuCisJICogU25lYWsgRXh0ZW5kZWQgUmVmcmVzaCBSZWNvdmVyeSBpbiBoZXJlIHRvby4KIAkgKi8KLQllY20tPmxhd2JhcjEgPSAoKENGR19ERFJfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZik7Ci0JZWNtLT5sYXdhcjEgPSAoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgbGF3X3NpemUpKTsKLQlkZWJ1ZygiRERSOkxBV0JBUjE9MHglMDh4XG4iLCBlY20tPmxhd2JhcjEpOwotCWRlYnVnKCJERFI6TEFSQVIxPTB4JTA4eFxuIiwgZWNtLT5sYXdhcjEpOwogCiAJLyoKLQkgKiBmaW5kIHRoZSBsYXJnZXN0IENBUworCSAqIEZvciBERFIgSSwgV1JSRUMoVHdyKSBhbmQgV1JUT1JEKFR3dHIpIGFyZSBub3QgaW4gU1BELAorCSAqIHVzZSBjb25zZXJ2YXRpdmUgdmFsdWUuCisJICogRm9yIEREUiBJSSwgdGhleSBhcmUgYnl0ZXMgMzYgYW5kIDM3LCBpbiBxdWFydGVyIG5hbm9zLgogCSAqLwotCWlmKHNwZC5jYXNfbGF0ICYgMHg0MCkgewotCQljYXNsYXQgPSA3OwotCX0gZWxzZSBpZiAoc3BkLmNhc19sYXQgJiAweDIwKSB7Ci0JCWNhc2xhdCA9IDY7Ci0JfSBlbHNlIGlmIChzcGQuY2FzX2xhdCAmIDB4MTApIHsKLQkJY2FzbGF0ID0gNTsKLQl9IGVsc2UgaWYgKHNwZC5jYXNfbGF0ICYgMHgwOCkgewotCQljYXNsYXQgPSA0OwotCX0gZWxzZSBpZiAoc3BkLmNhc19sYXQgJiAweDA0KSB7Ci0JCWNhc2xhdCA9IDM7Ci0JfSBlbHNlIGlmIChzcGQuY2FzX2xhdCAmIDB4MDIpIHsKLQkJY2FzbGF0ID0gMjsKLQl9IGVsc2UgaWYgKHNwZC5jYXNfbGF0ICYgMHgwMSkgewotCQljYXNsYXQgPSAxOworCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJdHdyX2NsayA9IDM7CS8qIENsb2NrcyAqLworCQl0d3RyX2NsayA9IDE7CS8qIENsb2NrcyAqLwogCX0gZWxzZSB7Ci0JCXB1dHMoIkREUjpubyB2YWxpZCBDQVMgTGF0ZW5jeSBpbmZvcm1hdGlvbi5cbiIpOwotCQlyZXR1cm4gMDsKKwkJdHdyX2NsayA9IHBpY29zX3RvX2NsayhzcGQudHdyICogMjUwKTsKKwkJdHd0cl9jbGsgPSBwaWNvc190b19jbGsoc3BkLnR3dHIgKiAyNTApOwogCX0KIAotCXRtcCA9IDIwMDAwIC8gKCgoc3BkLmNsa19jeWNsZSAmIDB4RjApID4+IDQpICogMTAKLQkJICAgICAgICsgKHNwZC5jbGtfY3ljbGUgJiAweDBmKSk7Ci0JZGVidWcoIkREUjpNb2R1bGUgbWF4aW11bSBkYXRhIHJhdGUgaXM6ICVkTWh6XG4iLCB0bXApOworCS8qCisJICogQ2FsY3VsYXRlIFRyZmMsIGluIHBpY29zLgorCSAqIEREUiBJOiAgQnl0ZSA0MiBzdHJhaWdodCB1cCBpbiBucy4KKwkgKiBERFIgSUk6IEJ5dGUgNDAgYW5kIDQyIHN3aXp6bGVkIHNvbWUsIGluIG5zLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCXRyZmMgPSBzcGQudHJmYyAqIDEwMDA7CQkvKiB1cCB0byBwcyAqLworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBieXRlNDBfdGFibGVfcHNbOF0gPSB7CisJCQkwLAorCQkJMjUwLAorCQkJMzMwLAorCQkJNTAwLAorCQkJNjYwLAorCQkJNzUwLAorCQkJMCwKKwkJCTAKKwkJfTsKIAotCXRtcDEgPSBnZXRfYnVzX2ZyZXEoMCkgLyAxMDAwMDAwOwotCWlmICh0bXAxIDwgMjMwICYmIHRtcDEgPj0gOTAgJiYgdG1wID49IDIzMCkgewotCQkvKiA5MH4yMzAgcmFuZ2UsIHRyZWF0ZWQgYXMgRERSIDIwMCAqLwotCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHhhMCkKLQkJCWNhc2xhdCAtPSAyOwotCQllbHNlIGlmKHNwZC5jbGtfY3ljbGUyID09IDB4YTApCi0JCQljYXNsYXQtLTsKLQl9IGVsc2UgaWYgKHRtcDEgPCAyODAgJiYgdG1wMSA+PSAyMzAgJiYgdG1wID49IDI4MCkgewotCQkvKiAyMzAtMjgwIHJhbmdlLCB0cmVhdGVkIGFzIEREUiAyNjYgKi8KLQkJaWYgKHNwZC5jbGtfY3ljbGUzID09IDB4NzUpCi0JCQljYXNsYXQgLT0gMjsKLQkJZWxzZSBpZiAoc3BkLmNsa19jeWNsZTIgPT0gMHg3NSkKLQkJCWNhc2xhdC0tOwotCX0gZWxzZSBpZiAodG1wMSA8IDM1MCAmJiB0bXAxID49IDI4MCAmJiB0bXAgPj0gMzUwKSB7Ci0JCS8qIDI4MH4zNTAgcmFuZ2UsIHRyZWF0ZWQgYXMgRERSIDMzMyAqLwotCQlpZiAoc3BkLmNsa19jeWNsZTMgPT0gMHg2MCkKLQkJCWNhc2xhdCAtPSAyOwotCQllbHNlIGlmIChzcGQuY2xrX2N5Y2xlMiA9PSAweDYwKQotCQkJY2FzbGF0LS07Ci0JfSBlbHNlIGlmICh0bXAxIDwgOTAgfHwgdG1wMSA+PSAzNTApIHsKLQkJLyogRERSIHJhdGUgb3V0LW9mLXJhbmdlICovCi0JCXB1dHMoIkREUjpwbGF0Zm9ybSBmcmVxdWVuY3kgaXMgbm90IGZpdCBmb3IgRERSIHJhdGVcbiIpOwotCQlyZXR1cm4gMDsKKwkJdHJmYyA9ICgoKHNwZC50cmN0cmZjX2V4dCAmIDB4MSkgKiAyNTYpICsgc3BkLnRyZmMpICogMTAwMAorCQkJKyBieXRlNDBfdGFibGVfcHNbKHNwZC50cmN0cmZjX2V4dCA+PiAxKSAmIDB4N107CiAJfQorCXRyZmNfY2xrID0gcGljb3NfdG9fY2xrKHRyZmMpOwogCiAJLyoKLQkgKiBub3RlOiBjYXNsYXQgbXVzdCBhbHNvIGJlIHByb2dyYW1tZWQgaW50byBkZHItPnNkcmFtX21vZGUKLQkgKiByZWdpc3Rlci4KLQkgKgotCSAqIG5vdGU6IFdSUkVDKFR3cikgYW5kIFdSVE9SRChUd3RyKSBhcmUgbm90IGluIFNQRCwKLQkgKiB1c2UgY29uc2VydmF0aXZlIHZhbHVlIGhlcmUuCisJICogVHJjZCwgQnl0ZSAyOSwgZnJvbSBxdWFydGVyIG5hbm9zIHRvIHBzIGFuZCBjbG9ja3MuCisJICovCisJdHJjZF9jbGsgPSBwaWNvc190b19jbGsoc3BkLnRyY2QgKiAyNTApICYgMHg3OworCisJLyoKKwkgKiBDb252ZXJ0IHRyZmNfY2xrIHRvIEREUiBjb250cm9sbGVyIGZpZWxkcy4gIEREUiBJIHNob3VsZAorCSAqIGZpdCBpbiB0aGUgUkVGUkVDIGZpZWxkICgxNi0xOSkgb2YgVElNSU5HX0NGR18xLCBidXQgdGhlCisJICogODU0OCBjb250cm9sbGVyIGhhcyBhbiBleHRlbmRlZCBSRUZSRUMgZmllbGQgb2YgdGhyZWUgYml0cy4KKwkgKiBUaGUgY29udHJvbGxlciBhdXRvbWF0aWNhbGx5IGFkZHMgOCBjbG9ja3MgdG8gdGhpcyB2YWx1ZSwKKwkgKiBzbyBwcmVhZGp1c3QgaXQgZG93biA4IGZpcnN0IGJlZm9yZSBzcGxpdHRpbmcgaXQgdXAuCisJICovCisJdHJmY19sb3cgPSAodHJmY19jbGsgLSA4KSAmIDB4ZjsKKwl0cmZjX2hpZ2ggPSAoKHRyZmNfY2xrIC0gOCkgPj4gNCkgJiAweDM7CisKKwkvKgorCSAqIFNuZWFrIGluIHNvbWUgRXh0ZW5kZWQgUmVmcmVzaCBSZWNvdmVyeS4KIAkgKi8KKwlkZHItPmV4dF9yZWZyZWMgPSAodHJmY19oaWdoIDw8IDE2KTsKKwlkZWJ1ZygiRERSOiBleHRfcmVmcmVjID0gMHglMDh4XG4iLCBkZHItPmV4dF9yZWZyZWMpOworCiAJZGRyLT50aW1pbmdfY2ZnXzEgPQotCSAgICAoKChwaWNvc190b19jbGsoc3BkLnRycCAqIDI1MCkgJiAweDA3KSA8PCAyOCApIHwKLQkgICAgICgocGljb3NfdG9fY2xrKHNwZC50cmFzICogMTAwMCkgJiAweDBmICkgPDwgMjQgKSB8Ci0JICAgICAoKHBpY29zX3RvX2NsayhzcGQudHJjZCAqIDI1MCkgJiAweDA3KSA8PCAyMCApIHwKLQkgICAgICgoY2FzbGF0ICYgMHgwNykgPDwgMTYgKSB8Ci0JICAgICAoKChwaWNvc190b19jbGsoc3BkLnNzZXRbNl0gKiAxMDAwKSAtIDgpICYgMHgwZikgPDwgMTIgKSB8Ci0JICAgICAoIDB4MzAwICkgfAotCSAgICAgKChwaWNvc190b19jbGsoc3BkLnRycmQgKiAyNTApICYgMHgwNykgPDwgNCkgfCAxKTsKKwkgICAgKDAKKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRycCAqIDI1MCkgJiAweDA3KSA8PCAyOCkJLyogUFJFVE9BQ1QgKi8KKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRyYXMgKiAxMDAwKSAmIDB4MGYgKSA8PCAyNCkJLyogQUNUVE9QUkUgKi8KKwkgICAgIHwgKHRyY2RfY2xrIDw8IDIwKQkJCQkJLyogQUNUVE9SVyAqLworCSAgICAgfCAoY2FzbGF0X2N0cmwgPDwgMTYpCQkJCS8qIENBU0xBVCAqLworCSAgICAgfCAodHJmY19sb3cgPDwgMTIpCQkJCQkvKiBSRUZFQyAqLworCSAgICAgfCAoKHR3cl9jbGsgJiAweDA3KSA8PCA4KQkJCQkvKiBXUlJSRUMgKi8KKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRycmQgKiAyNTApICYgMHgwNykgPDwgNCkJLyogQUNUVE9BQ1QgKi8KKwkgICAgIHwgKCh0d3RyX2NsayAmIDB4MDcpIDw8IDApCQkJCS8qIFdSVE9SRCAqLworCSAgICAgKTsKIAotCWRkci0+dGltaW5nX2NmZ18yID0gMHgwMDAwMDgwMDsKKwlkZWJ1ZygiRERSOiB0aW1pbmdfY2ZnXzEgID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfMSk7CiAKLQlkZWJ1ZygiRERSOnRpbWluZ19jZmdfMT0weCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ18xKTsKLQlkZWJ1ZygiRERSOnRpbWluZ19jZmdfMj0weCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ18yKTsKIAogCS8qCi0JICogT25seSBERFIgSSBpcyBzdXBwb3J0ZWQKLQkgKiBERFIgSSBhbmQgSUkgaGF2ZSBkaWZmZXJlbnQgbW9kZS1yZWdpc3Rlci1zZXQgZGVmaW5pdGlvbgorCSAqIFRpbWluZ19Db25maWdfMgorCSAqIFdhczogMHgwMDAwMDgwMDsKIAkgKi8KIAotCS8qIGJ1cnN0IGxlbmd0aCBpcyBhbHdheXMgNCAqLwotCXN3aXRjaChjYXNsYXQpIHsKLQljYXNlIDI6Ci0JCWRkci0+c2RyYW1fbW9kZSA9IDB4NTI7IC8qIDEuNSAqLwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWRkci0+c2RyYW1fbW9kZSA9IDB4MjI7IC8qIDIuMCAqLwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWRkci0+c2RyYW1fbW9kZSA9IDB4NjI7IC8qIDIuNSAqLwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWRkci0+c2RyYW1fbW9kZSA9IDB4MzI7IC8qIDMuMCAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwdXRzKCJERFI6b25seSBDQVMgTGF0ZW5jeSAxLjUsIDIuMCwgMi41LCAzLjAgaXMgc3VwcG9ydGVkLlxuIik7Ci0JCXJldHVybiAwOworCS8qCisJICogQWRkaXRpdmUgTGF0ZW5jeQorCSAqIEZvciBERFIgSSwgMC4KKwkgKiBGb3IgRERSIElJLCB3aXRoIE9EVCBlbmFibGVkLCB1c2UgImEgdmFsdWUiIGxlc3MgdGhhbiBBQ1RUT1JXLAorCSAqIHdoaWNoIGNvbWVzIGZyb20gVHJjZCwgYW5kIGFsc28gbm90ZSB0aGF0OgorCSAqCWFkZF9sYXQgKyBjYXNsYXQgbXVzdCBiZSA+PSA0CisJICovCisJYWRkX2xhdCA9IDA7CisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyCisJICAgICYmIChvZHRfd3JfY2ZnIHx8IG9kdF9yZF9jZmcpCisJICAgICYmIChjYXNsYXQgPCA0KSkgeworCQlhZGRfbGF0ID0gNCAtIGNhc2xhdDsKKwkJaWYgKGFkZF9sYXQgPiB0cmNkX2NsaykgeworCQkJYWRkX2xhdCA9IHRyY2RfY2xrIC0gMTsKKwkJfQogCX0KLQlkZWJ1ZygiRERSOnNkcmFtX21vZGU9MHglMDh4XG4iLCBkZHItPnNkcmFtX21vZGUpOwogCi0Jc3dpdGNoKHNwZC5yZWZyZXNoKSB7Ci0JY2FzZSAweDAwOgotCWNhc2UgMHg4MDoKLQkJdG1wID0gcGljb3NfdG9fY2xrKDE1NjI1MDAwKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAxOgotCWNhc2UgMHg4MToKLQkJdG1wID0gcGljb3NfdG9fY2xrKDM5MDAwMDApOwotCQlicmVhazsKLQljYXNlIDB4MDI6Ci0JY2FzZSAweDgyOgotCQl0bXAgPSBwaWNvc190b19jbGsoNzgwMDAwMCk7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMzoKLQljYXNlIDB4ODM6Ci0JCXRtcCA9IHBpY29zX3RvX2NsaygzMTMwMDAwMCk7Ci0JCWJyZWFrOwotCWNhc2UgMHgwNDoKLQljYXNlIDB4ODQ6Ci0JCXRtcCA9IHBpY29zX3RvX2Nsayg2MjUwMDAwMCk7Ci0JCWJyZWFrOwotCWNhc2UgMHgwNToKLQljYXNlIDB4ODU6Ci0JCXRtcCA9IHBpY29zX3RvX2NsaygxMjUwMDAwMDApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl0bXAgPSAweDUxMjsKLQkJYnJlYWs7CisJLyoKKwkgKiBXcml0ZSBEYXRhIERlbGF5CisJICogSGlzdG9yaWNhbGx5IDB4MiA9PSA0LzggY2xvY2sgZGVsYXkuCisJICogRW1waXJpY2FsbHksIDB4MyA9PSA2LzggY2xvY2sgZGVsYXkgaXMgc3VnZ2VzdGVkIGZvciBERFIgSSAyNjYuCisJICovCisJd3JfZGF0YV9kZWxheSA9IDM7CisKKwkvKgorCSAqIFdyaXRlIExhdGVuY3kKKwkgKiBSZWFkIHRvIFByZWNoYXJnZQorCSAqIE1pbmltdW0gQ0tFIFB1bHNlIFdpZHRoLgorCSAqIEZvdXIgQWN0aXZhdGUgV2luZG93CisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIGxpZS4gIEl0IHNob3VsZCByZWFsbHkgYmUgMSwgYnV0IGlmIGl0IGlzCisJCSAqIHNldCB0byAxLCBiaXRzIG92ZXJsYXAgaW50byB0aGUgb2xkIGNvbnRyb2xsZXIncworCQkgKiBvdGhlcndpc2UgdW51c2VkIEFDU00gZmllbGQuICBJZiB3ZSBsZWF2ZSBpdCAwLCB0aGVuCisJCSAqIHRoZSBIVyB3aWxsIG1hZ2ljYWxseSB0cmVhdCBpdCBhcyAxIGZvciBERFIgMS4gIE9oIFllYS4KKwkJICovCisJCXdyX2xhdCA9IDA7CisKKwkJdHJ0cF9jbGsgPSAyOwkJLyogQnkgdGhlIGJvb2suICovCisJCWNrZV9taW5fY2xrID0gMTsJLyogQnkgdGhlIGJvb2suICovCisJCWZvdXJfYWN0ID0gMTsJCS8qIEJ5IHRoZSBib29rLiAqLworCisJfSBlbHNlIHsKKwkJd3JfbGF0ID0gY2FzbGF0IC0gMTsKKworCQkvKiBDb252ZXJ0IFNQRCB2YWx1ZSBmcm9tIHF1YXJ0ZXIgbmFub3MgdG8gcGljb3MuICovCisJCXRydHBfY2xrID0gcGljb3NfdG9fY2xrKHNwZC50cnRwICogMjUwKTsKKworCQlja2VfbWluX2NsayA9IDM7CS8qIEJ5IHRoZSBib29rLiAqLworCQlmb3VyX2FjdCA9IHBpY29zX3RvX2NsaygzNzUwMCk7CS8qIEJ5IHRoZSBib29rLiAxayBwYWdlcz8gKi8KKwl9CisKKwkvKgorCSAqIEVtcGlyaWNhbGx5IHNldCB+TUNBUy10by1wcmVhbWJsZSBvdmVycmlkZSBmb3IgRERSIDIuCisJICogWW91ciBtaWxhZ2Ugd2lsbCB2YXJ5LgorCSAqLworCWNwbyA9IDA7CisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCWlmIChlZmZlY3RpdmVfZGF0YV9yYXRlID09IDI2NiB8fCBlZmZlY3RpdmVfZGF0YV9yYXRlID09IDMzMykgeworCQkJY3BvID0gMHg3OwkJLyogUkVBRF9MQVQgKyA1LzQgKi8KKwkJfSBlbHNlIGlmIChlZmZlY3RpdmVfZGF0YV9yYXRlID09IDQwMCkgeworCQkJY3BvID0gMHg5OwkJLyogUkVBRF9MQVQgKyA3LzQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIFB1cmUgc3BlY3VsYXRpb24gKi8KKwkJCWNwbyA9IDB4YjsKKwkJfQogCX0KIAorCWRkci0+dGltaW5nX2NmZ18yID0gKDAKKwkJfCAoKGFkZF9sYXQgJiAweDcpIDw8IDI4KQkJLyogQUREX0xBVCAqLworCQl8ICgoY3BvICYgMHgxZikgPDwgMjMpCQkJLyogQ1BPICovCisJCXwgKCh3cl9sYXQgJiAweDcpIDw8IDE5KQkJLyogV1JfTEFUICovCisJCXwgKCh0cnRwX2NsayAmIDB4NykgPDwgMTMpCQkvKiBSRF9UT19QUkUgKi8KKwkJfCAoKHdyX2RhdGFfZGVsYXkgJiAweDcpIDw8IDEwKQkJLyogV1JfREFUQV9ERUxBWSAqLworCQl8ICgoY2tlX21pbl9jbGsgJiAweDcpIDw8IDYpCQkvKiBDS0VfUExTICovCisJCXwgKChmb3VyX2FjdCAmIDB4MWYpIDw8IDApCQkvKiBGT1VSX0FDVCAqLworCQkpOworCisJZGVidWcoIkREUjogdGltaW5nX2NmZ18yID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfMik7CisKKwogCS8qCi0JICogU2V0IEJTVE9QUkUgdG8gMHgxMDAgZm9yIHBhZ2UgbW9kZQotCSAqIElmIGF1dG8tY2hhcmdlIGlzIHVzZWQsIHNldCBCU1RPUFJFID0gMAorCSAqIERldGVybWluZSB0aGUgTW9kZSBSZWdpc3RlciBTZXQuCisJICoKKwkgKiBUaGlzIGlzIG5vbWluYWxseSBwYXJ0IHNwZWNpZmljLCBidXQgaXQgYXBwZWFycyB0byBiZQorCSAqIGNvbnNpc3RlbnQgZm9yIGFsbCBERFIgSSBkZXZpY2VzLCBhbmQgZm9yIGFsbCBERFIgSUkgZGV2aWNlcy4KKwkgKgorCSAqICAgICBjYXNsYXQgbXVzdCBiZSBwcm9ncmFtbWVkCisJICogICAgIGJ1cnN0IGxlbmd0aCBpcyBhbHdheXMgNAorCSAqICAgICBidXJzdCB0eXBlIGlzIHNlcXVlbnRpYWwKKwkgKgorCSAqIEZvciBERFIgSToKKwkgKiAgICAgb3BlcmF0aW5nIG1vZGUgaXMgIm5vcm1hbCIKKwkgKgorCSAqIEZvciBERFIgSUk6CisJICogICAgIG90aGVyIHN0dWZmCiAJICovCi0JZGRyLT5zZHJhbV9pbnRlcnZhbCA9ICgodG1wICYgMHgzZmZmKSA8PCAxNikgfCAweDEwMDsKLQlkZWJ1ZygiRERSOnNkcmFtX2ludGVydmFsPTB4JTA4eFxuIiwgZGRyLT5zZHJhbV9pbnRlcnZhbCk7CisKKwltb2RlX2Nhc2xhdCA9IDA7CiAKIAkvKgorCSAqIFRhYmxlIGxvb2t1cCBmcm9tIEREUiBJIG9yIElJIERldmljZSBPcGVyYXRpb24gU3BlY3MuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJaWYgKDEgPD0gY2FzbGF0ICYmIGNhc2xhdCA8PSA0KSB7CisJCQl1bnNpZ25lZCBjaGFyIG1vZGVfY2FzbGF0X3RhYmxlWzRdID0geworCQkJCTB4NSwJLyogMS41IGNsb2NrcyAqLworCQkJCTB4MiwJLyogMi4wIGNsb2NrcyAqLworCQkJCTB4NiwJLyogMi41IGNsb2NrcyAqLworCQkJCTB4MwkvKiAzLjAgY2xvY2tzICovCisJCQl9OworCQkJbW9kZV9jYXNsYXQgPSBtb2RlX2Nhc2xhdF90YWJsZVtjYXNsYXQgLSAxXTsKKwkJfSBlbHNlIHsKKwkJCXB1dHMoIkREUiBJOiBPbmx5IENBUyBMYXRlbmNpZXMgb2YgMS41LCAyLjAsICIKKwkJCSAgICAgIjIuNSBhbmQgMy4wIGNsb2NrcyBhcmUgc3VwcG9ydGVkLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKDIgPD0gY2FzbGF0ICYmIGNhc2xhdCA8PSA1KSB7CisJCQltb2RlX2Nhc2xhdCA9IGNhc2xhdDsKKwkJfSBlbHNlIHsKKwkJCXB1dHMoIkREUiBJSTogT25seSBDQVMgTGF0ZW5jaWVzIG9mIDIuMCwgMy4wLCAiCisJCQkgICAgICI0LjAgYW5kIDUuMCBjbG9ja3MgYXJlIHN1cHBvcnRlZC5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIEVuY29kZWQgQnVyc3QgTGVuZ2h0IG9mIDQuCisJICovCisJYnVyc3RfbGVuID0gMjsJCQkvKiBGaWF0LiAqLworCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJdHdyX2F1dG9fY2xrID0gMDsJLyogSGlzdG9yaWNhbCAqLworCX0gZWxzZSB7CisJCS8qCisJCSAqIERldGVybWluZSB0Q0sgbWF4IGluIHBpY29zLiAgR3JhYiB0V1IgYW5kIGNvbnZlcnQgdG8gcGljb3MuCisJCSAqIEF1dG8tcHJlY2hhcmdlIHdyaXRlIHJlY292ZXJ5IGlzOgorCQkgKglXUiA9IHJvdW5kdXAodFdSX25zL3RDS21heF9ucykuCisJCSAqCisJCSAqIFBvbmRlcjogSXMgdHdyX2F1dG9fY2xrIGRpZmZlcmVudCB0aGFuIHR3cl9jbGs/CisJCSAqLworCQl0Q0ttYXhfcHMgPSBjb252ZXJ0X2JjZF90ZW50aHNfdG9fY3ljbGVfdGltZV9wcyhzcGQudGNrbWF4KTsKKwkJdHdyX2F1dG9fY2xrID0gKHNwZC50d3IgKiAyNTAgKyB0Q0ttYXhfcHMgLSAxKSAvIHRDS21heF9wczsKKwl9CisKKworCS8qCisJICogTW9kZSBSZWcgaW4gYml0cyAxNiB+IDMxLAorCSAqIEV4dGVuZGVkIE1vZGUgUmVnIDEgaW4gYml0cyAwIH4gMTUuCisJICovCisJbW9kZV9vZHRfZW5hYmxlID0gMHgwOwkJCS8qIERlZmF1bHQgZGlzYWJsZWQgKi8KKwlpZiAob2R0X3dyX2NmZyB8fCBvZHRfcmRfY2ZnKSB7CisJCS8qCisJCSAqIEJpdHMgNiBhbmQgMiBpbiBFeHRlbmRlZCBNUlMoMSkKKwkJICogQml0IDIgPT0gMHgwNCA9PSA3NSBPaG0sIHdpdGggMiBESU1NIG1vZHVsZXMuCisJCSAqIEJpdCA2ID09IDB4NDAgPT0gMTUwIE9obSwgd2l0aCAxIERJTU0gbW9kdWxlLgorCQkgKi8KKwkJbW9kZV9vZHRfZW5hYmxlID0gMHg0MDsJCS8qIDE1MCBPaG0gKi8KKwl9CisKKwlkZHItPnNkcmFtX21vZGUgPQorCQkoMAorCQkgfCAoYWRkX2xhdCA8PCAoMTYgKyAzKSkJLyogQWRkaXRpdmUgTGF0ZW5jeSBpbiBFTVJTMSAqLworCQkgfCAobW9kZV9vZHRfZW5hYmxlIDw8IDE2KQkvKiBPRFQgRW5hYmxlIGluIEVNUlMxICovCisJCSB8ICh0d3JfYXV0b19jbGsgPDwgOSkJCS8qIFdyaXRlIFJlY292ZXJ5IEF1dG9wcmUgKi8KKwkJIHwgKG1vZGVfY2FzbGF0IDw8IDQpCQkvKiBjYXNsYXQgKi8KKwkJIHwgKGJ1cnN0X2xlbiA8PCAwKQkJLyogQnVyc3QgbGVuZ3RoICovCisJCSApOworCisJZGVidWcoIkREUjogc2RyYW1fbW9kZSAgID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX21vZGUpOworCisKKwkvKgorCSAqIENsZWFyIEVNUlMyIGFuZCBFTVJTMy4KKwkgKi8KKwlkZHItPnNkcmFtX21vZGVfMiA9IDA7CisJZGVidWcoIkREUjogc2RyYW1fbW9kZV8yID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX21vZGVfMik7CisKKworCS8qCisJICogRGV0ZXJtaW5lIFJlZnJlc2ggUmF0ZS4gIElnbm9yZSBzZWxmIHJlZnJlc2ggYml0IG9uIEREUiBJLgorCSAqIFRhYmxlIGZyb20gU1BEIFNwZWMsIEJ5dGUgMTIsIGNvbnZlcnRlZCB0byBwaWNvc2Vjb25kcyBhbmQKKwkgKiBmaWxsZWQgaW4gd2l0aCAiZGVmYXVsdCIgbm9ybWFsIHZhbHVlcy4KKwkgKi8KKwl7CisJCXVuc2lnbmVkIGludCByZWZyZXNoX2NsazsKKwkJdW5zaWduZWQgaW50IHJlZnJlc2hfdGltZV9uc1s4XSA9IHsKKwkJCTE1NjI1MDAwLAkvKiAwIE5vcm1hbCAgICAxLjAweCAqLworCQkJMzkwMDAwMCwJLyogMSBSZWR1Y2VkICAgIC4yNXggKi8KKwkJCTc4MDAwMDAsCS8qIDIgRXh0ZW5kZWQgICAuNTB4ICovCisJCQkzMTMwMDAwMCwJLyogMyBFeHRlbmRlZCAgMi4wMHggKi8KKwkJCTYyNTAwMDAwLAkvKiA0IEV4dGVuZGVkICA0LjAweCAqLworCQkJMTI1MDAwMDAwLAkvKiA1IEV4dGVuZGVkICA4LjAweCAqLworCQkJMTU2MjUwMDAsCS8qIDYgTm9ybWFsICAgIDEuMDB4ICBmaWxsZXIgKi8KKwkJCTE1NjI1MDAwLAkvKiA3IE5vcm1hbCAgICAxLjAweCAgZmlsbGVyICovCisJCX07CisKKwkJcmVmcmVzaF9jbGsgPSBwaWNvc190b19jbGsocmVmcmVzaF90aW1lX25zW3NwZC5yZWZyZXNoICYgMHg3XSk7CisKKwkJLyoKKwkJICogU2V0IEJTVE9QUkUgdG8gMHgxMDAgZm9yIHBhZ2UgbW9kZQorCQkgKiBJZiBhdXRvLWNoYXJnZSBpcyB1c2VkLCBzZXQgQlNUT1BSRSA9IDAKKwkJICovCisJCWRkci0+c2RyYW1faW50ZXJ2YWwgPQorCQkJKDAKKwkJCSB8IChyZWZyZXNoX2NsayAmIDB4M2ZmZikgPDwgMTYKKwkJCSB8IDB4MTAwCisJCQkgKTsKKwkJZGVidWcoIkREUjogc2RyYW1faW50ZXJ2YWwgPSAweCUwOHhcbiIsIGRkci0+c2RyYW1faW50ZXJ2YWwpOworCX0KKworCS8qCiAJICogSXMgdGhpcyBhbiBFQ0MgRERSIGNoaXA/CisJICogQnV0IGRvbid0IG1lc3Mgd2l0aCBpdCBpZiB0aGUgRERSIGNvbnRyb2xsZXIgd2lsbCBpbml0IG1lbS4KIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKQorI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKIAlpZiAoc3BkLmNvbmZpZyA9PSAweDAyKSB7CiAJCWRkci0+ZXJyX2Rpc2FibGUgPSAweDAwMDAwMDBkOwogCQlkZHItPmVycl9zYmUgPSAweDAwZmYwMDAwOwogCX0KLQlkZWJ1ZygiRERSOmVycl9kaXNhYmxlPTB4JTA4eFxuIiwgZGRyLT5lcnJfZGlzYWJsZSk7Ci0JZGVidWcoIkREUjplcnJfc2JlPTB4JTA4eFxuIiwgZGRyLT5lcnJfc2JlKTsKKwlkZWJ1ZygiRERSOiBlcnJfZGlzYWJsZSA9IDB4JTA4eFxuIiwgZGRyLT5lcnJfZGlzYWJsZSk7CisJZGVidWcoIkREUjogZXJyX3NiZSA9IDB4JTA4eFxuIiwgZGRyLT5lcnJfc2JlKTsKICNlbmRpZgotCWFzbSgic3luYztpc3luYzttc3luYyIpOwogCisJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CiAJdWRlbGF5KDUwMCk7CiAKLSNpZmRlZiBNUEM4NXh4X0REUl9TRFJBTV9DTEtfQ05UTAotCS8qIFNldHVwIHRoZSBjbG9jayBjb250cm9sICg4NTU1IGFuZCBsYXRlcikKLQkgKiBTRFJBTV9DTEtfQ05UTFswXSA9IFNvdXJjZSBzeW5jaHJvbm91cyBlbmFibGUgPT0gMQotCSAqIFNEUkFNX0NMS19DTlRMWzUtN10gPSBDbG9jayBBZGp1c3QgPT0gMyAoMy80IGN5Y2xlIGxhdGUpCisJLyoKKwkgKiBTRFJBTSBDZmcgMgorCSAqLworCisJLyoKKwkgKiBXaGVuIE9EVCBpcyBlbmFibGVkLCBDaGFwIDkgc3VnZ2VzdHMgYXNzZXJ0aW5nIE9EVCB0bworCSAqIGludGVybmFsIElPcyBvbmx5IGR1cmluZyByZWFkcy4KKwkgKi8KKwlvZHRfY2ZnID0gMDsKKwlpZiAob2R0X3JkX2NmZyB8IG9kdF93cl9jZmcpIHsKKwkJb2R0X2NmZyA9IDB4MjsJCS8qIE9EVCB0byBJT3MgZHVyaW5nIHJlYWRzICovCisJfQorCisJLyoKKwkgKiBUcnkgdG8gdXNlIGRpZmZlcmVudGlhbCBEUVMgd2l0aCBERFIgSUkuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJZHFzX2NmZyA9IDA7CQkvKiBObyBEaWZmZXJlbnRpYWwgRFFTIGZvciBERFIgSSAqLworCX0gZWxzZSB7CisJCWRxc19jZmcgPSAweDE7CQkvKiBEaWZmZXJlbnRpYWwgRFFTIGZvciBERFIgSUkgKi8KKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKKwkvKgorCSAqIFVzZSB0aGUgRERSIGNvbnRyb2xsZXIgdG8gYXV0byBpbml0aWFsaXplIG1lbW9yeS4KIAkgKi8KLQlkZHItPnNkcmFtX2Nsa19jbnRsID0gMHg4MzAwMDAwMDsKKwlkX2luaXQgPSAxOworCWRkci0+c2RyYW1fZGF0YV9pbml0ID0gQ09ORklHX01FTV9JTklUX1ZBTFVFOworCWRlYnVnKCJERFI6IGRkcl9kYXRhX2luaXQgPSAweCUwOHhcbiIsIGRkci0+c2RyYW1fZGF0YV9pbml0KTsKKyNlbHNlCisJLyoKKwkgKiBNZW1vcnkgd2lsbCBiZSBpbml0aWFsaXplZCB2aWEgRE1BLCBvciBub3QgYXQgYWxsLgorCSAqLworCWRfaW5pdCA9IDA7CiAjZW5kaWYKIAorCWRkci0+c2RyYW1fY2ZnXzIgPSAoMAorCQkJICAgIHwgKGRxc19jZmcgPDwgMjYpCS8qIERpZmZlcmVudGlhbCBEUVMgKi8KKwkJCSAgICB8IChvZHRfY2ZnIDw8IDIxKQkvKiBPRFQgKi8KKwkJCSAgICB8IChkX2luaXQgPDwgNCkJLyogRF9JTklUIGF1dG8gaW5pdCBERFIgKi8KKwkJCSAgICApOworCisJZGVidWcoIkREUjogc2RyYW1fY2ZnXzIgID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX2NmZ18yKTsKKworCisjaWZkZWYgTVBDODV4eF9ERFJfU0RSQU1fQ0xLX0NOVEwKKwl7CisJCXVuc2lnbmVkIGNoYXIgY2xrX2FkanVzdDsKKworCQkvKgorCQkgKiBTZXR1cCB0aGUgY2xvY2sgY29udHJvbC4KKwkJICogU0RSQU1fQ0xLX0NOVExbMF0gPSBTb3VyY2Ugc3luY2hyb25vdXMgZW5hYmxlID09IDEKKwkJICogU0RSQU1fQ0xLX0NOVExbNS03XSA9IENsb2NrIEFkanVzdAorCQkgKgkwMTEwCTMvNCBjeWNsZSBsYXRlCisJCSAqCTAxMTEJNy84IGN5Y2xlIGxhdGUKKwkJICovCisJCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCQljbGtfYWRqdXN0ID0gMHg2OworCQl9IGVsc2UgeworCQkJY2xrX2FkanVzdCA9IDB4NzsKKwkJfQorCisJCWRkci0+c2RyYW1fY2xrX2NudGwgPSAoMAorCQkJICAgICAgIHwgMHg4MDAwMDAwMAorCQkJICAgICAgIHwgKGNsa19hZGp1c3QgPDwgMjMpCisJCQkgICAgICAgKTsKKwkJZGVidWcoIkREUjogc2RyYW1fY2xrX2NudGwgPSAweCUwOHhcbiIsIGRkci0+c2RyYW1fY2xrX2NudGwpOworCX0KKyNlbmRpZgorCiAJLyoKLQkgKiBGaWd1cmUgb3V0IHRoZSBzZXR0aW5ncyBmb3IgdGhlIHNkcmFtX2NmZyByZWdpc3Rlci4gIEJ1aWxkIHVwCi0JICogdGhlIGVudGlyZSByZWdpc3RlciBpbiAndG1wJyBiZWZvcmUgd3JpdGluZyBzaW5jZSB0aGUgd3JpdGUgaW50bwotCSAqIHRoZSByZWdpc3RlciB3aWxsIGFjdHVhbGx5IGVuYWJsZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBhbGwKLQkgKiBzZXR0aW5ncyBtdXN0IGJlIGRvbmUgYmVmb3JlIGVuYWJsaW5nLgorCSAqIEZpZ3VyZSBvdXQgdGhlIHNldHRpbmdzIGZvciB0aGUgc2RyYW1fY2ZnIHJlZ2lzdGVyLgorCSAqIEJ1aWxkIHVwIHRoZSBlbnRpcmUgcmVnaXN0ZXIgaW4gJ3NkcmFtX2NmZycgYmVmb3JlIHdyaXRpbmcKKwkgKiBzaW5jZSB0aGUgd3JpdGUgaW50byB0aGUgcmVnaXN0ZXIgd2lsbCBhY3R1YWxseSBlbmFibGUgdGhlCisJICogbWVtb3J5IGNvbnRyb2xsZXI7IGFsbCBzZXR0aW5ncyBtdXN0IGJlIGRvbmUgYmVmb3JlIGVuYWJsaW5nLgogCSAqCiAJICogc2RyYW1fY2ZnWzBdICAgPSAxIChkZHIgc2RyYW0gbG9naWMgZW5hYmxlKQogCSAqIHNkcmFtX2NmZ1sxXSAgID0gMSAoc2VsZi1yZWZyZXNoLWVuYWJsZSkKLQkgKiBzZHJhbV9jZmdbNjo3XSA9IDIgKFNEUkFNIHR5cGUgPSBERFIgU0RSQU0pCisJICogc2RyYW1fY2ZnWzU6N10gPSAoU0RSQU0gdHlwZSA9IEREUiBTRFJBTSkKKwkgKgkJCTAxMCBERFIgMSBTRFJBTQorCSAqCQkJMDExIEREUiAyIFNEUkFNCiAJICovCi0JdG1wID0gMHhjMjAwMDAwMDsKKwlzZHJhbV90eXBlID0gKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpID8gMiA6IDM7CisJc2RyYW1fY2ZnID0gKDAKKwkJICAgICB8ICgxIDw8IDMxKQkJCS8qIEVuYWJsZSAqLworCQkgICAgIHwgKDEgPDwgMzApCQkJLyogU2VsZiByZWZyZXNoICovCisJCSAgICAgfCAoc2RyYW1fdHlwZSA8PCAyNCkJCS8qIFNEUkFNIHR5cGUgKi8KKwkJICAgICApOwogCiAJLyoKIAkgKiBzZHJhbV9jZmdbM10gPSBSRF9FTiAtIHJlZ2lzdGVyZWQgRElNTSBlbmFibGUKIAkgKiAgIEEgdmFsdWUgb2YgMHgyNiBpbmRpY2F0ZXMgbWljcm9uIHJlZ2lzdGVyZWQgRElNTVMgKG1pY3Jvbi5jb20pCiAJICovCi0JaWYgKHNwZC5tb2RfYXR0ciA9PSAweDI2KSB7Ci0JCXRtcCB8PSAweDEwMDAwMDAwOworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSICYmIHNwZC5tb2RfYXR0ciA9PSAweDI2KSB7CisJCXNkcmFtX2NmZyB8PSAweDEwMDAwMDAwOwkJLyogUkRfRU4gKi8KIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKQpAQCAtMzY5LDcgKzg5MSw3IEBACiAJICogSWYgdGhlIHVzZXIgd2FudGVkIEVDQyAoZW5hYmxlZCB2aWEgc2RyYW1fY2ZnWzJdKQogCSAqLwogCWlmIChzcGQuY29uZmlnID09IDB4MDIpIHsKLQkJdG1wIHw9IDB4MjAwMDAwMDA7CisJCXNkcmFtX2NmZyB8PSAweDIwMDAwMDAwOwkJLyogRUNDX0VOICovCiAJfQogI2VuZGlmCiAKQEAgLTM4NSwyNyArOTA3LDE2MCBAQAogCQkJLyoKIAkJCSAqIEVuYWJsZSAyVCB0aW1pbmcgYnkgc2V0dGluZyBzZHJhbV9jZmdbMTZdLgogCQkJICovCi0JCQl0bXAgfD0gMHg4MDAwOworCQkJc2RyYW1fY2ZnIHw9IDB4ODAwMDsJCS8qIDJUX0VOICovCiAjZW5kaWYKIAkJfQogCX0KIAotCWRkci0+c2RyYW1fY2ZnID0gdG1wOworCS8qCisJICogMjAwIHBhaW5mdWwgbWljcm8tc2Vjb25kcyBtdXN0IGVsYXBzZSBiZXR3ZWVuCisJICogdGhlIEREUiBjbG9jayBzZXR1cCBhbmQgdGhlIEREUiBjb25maWcgZW5hYmxlLgorCSAqLworCXVkZWxheSgyMDApOworCisJLyoKKwkgKiBHbyEKKwkgKi8KKwlkZHItPnNkcmFtX2NmZyA9IHNkcmFtX2NmZzsKIAogCWFzbSgic3luYztpc3luYzttc3luYyIpOwogCXVkZWxheSg1MDApOwogCisJZGVidWcoIkREUjogc2RyYW1fY2ZnICAgPSAweCUwOHhcbiIsIGRkci0+c2RyYW1fY2ZnKTsKKworCi0JZGVidWcoIkREUjpzZHJhbV9jZmc9MHglMDh4XG4iLCBkZHItPnNkcmFtX2NmZyk7CisjaWYgZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCisJLyoKKwkgKiBQb2xsIHVudGlsIG1lbW9yeSBpcyBpbml0aWFsaXplZC4KKwkgKiA1MTIgTWVnIGF0IDQwMCBtaWdodCBoaXQgdGhpcyAyMDAgdGltZXMgb3Igc28uCisJICovCisJd2hpbGUgKChkZHItPnNkcmFtX2NmZ18yICYgKGRfaW5pdCA8PCA0KSkgIT0gMCkgeworCQl1ZGVsYXkoMTAwMCk7CisJfQorI2VuZGlmCisKKworCS8qCisJICogRmlndXJlIG91dCBtZW1vcnkgc2l6ZSBpbiBNZWdhYnl0ZXMuCisJICovCisJbWVtc2l6ZSA9IG5fcmFua3MgKiByYW5rX2RlbnNpdHkgLyAweDEwMDAwMDsKKworCS8qCisJICogRXN0YWJsaXNoIExvY2FsIEFjY2VzcyBXaW5kb3cgYW5kIFRMQiBtYXBwaW5ncyBmb3IgRERSIG1lbW9yeS4KKwkgKi8KKwltZW1zaXplID0gc2V0dXBfbGF3c19hbmRfdGxicyhtZW1zaXplKTsKKwlpZiAobWVtc2l6ZSA9PSAwKSB7CisJCXJldHVybiAwOworCX0KIAogCXJldHVybiBtZW1zaXplICogMTAyNCAqIDEwMjQ7CiB9CisKKworLyoKKyAqIFNldHVwIExvY2FsIEFjY2VzcyBXaW5kb3cgYW5kIFRMQjEgbWFwcGluZ3MgZm9yIHRoZSByZXF1ZXN0ZWQKKyAqIGFtb3VudCBvZiBtZW1vcnkuICBSZXR1cm5zIHRoZSBhbW91bnQgb2YgbWVtb3J5IGFjdHVhbGx5IG1hcHBlZAorICogKHVzdWFsbHkgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc2l6ZSksIG9yIDAgb24gZXJyb3IuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorc2V0dXBfbGF3c19hbmRfdGxicyh1bnNpZ25lZCBpbnQgbWVtc2l6ZSkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9sb2NhbF9lY21fdCAqZWNtID0gJmltbWFwLT5pbV9sb2NhbF9lY207CisJdW5zaWduZWQgaW50IHRsYl9zaXplOworCXVuc2lnbmVkIGludCBsYXdfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmFtX3RsYl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgcmFtX3RsYl9hZGRyZXNzOworCisJLyoKKwkgKiBEZXRlcm1pbmUgc2l6ZSBvZiBlYWNoIFRMQjEgZW50cnkuCisJICovCisJc3dpdGNoIChtZW1zaXplKSB7CisJY2FzZSAxNjoKKwljYXNlIDMyOgorCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl8xNk07CisJCWJyZWFrOworCWNhc2UgNjQ6CisJY2FzZSAxMjg6CisJCXRsYl9zaXplID0gQk9PS0VfUEFHRVNaXzY0TTsKKwkJYnJlYWs7CisJY2FzZSAyNTY6CisJY2FzZSA1MTI6CisJY2FzZSAxMDI0OgorCWNhc2UgMjA0ODoKKwkJdGxiX3NpemUgPSBCT09LRV9QQUdFU1pfMjU2TTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHV0cygiRERSOiBvbmx5IDE2TSwzMk0sNjRNLDEyOE0sMjU2TSw1MTJNLDFHIGFuZCAyRyBhcmUgc3VwcG9ydGVkLlxuIik7CisKKwkJLyoKKwkJICogVGhlIG1lbW9yeSB3YXMgbm90IGFibGUgdG8gYmUgbWFwcGVkLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKworCS8qCisJICogQ29uZmlndXJlIEREUiBUTEIxIGVudHJpZXMuCisJICogU3RhcnRpbmcgYXQgVExCMSA4LCB1c2Ugbm8gbW9yZSB0aGFuIDggVExCMSBlbnRyaWVzLgorCSAqLworCXJhbV90bGJfaW5kZXggPSA4OworCXJhbV90bGJfYWRkcmVzcyA9ICh1bnNpZ25lZCBpbnQpQ0ZHX0REUl9TRFJBTV9CQVNFOworCXdoaWxlIChyYW1fdGxiX2FkZHJlc3MgPCAobWVtc2l6ZSAqIDEwMjQgKiAxMDI0KQorCSAgICAgICYmIHJhbV90bGJfaW5kZXggPCAxNikgeworCQltdHNwcihNQVMwLCBUTEIxX01BUzAoMSwgcmFtX3RsYl9pbmRleCwgMCkpOworCQltdHNwcihNQVMxLCBUTEIxX01BUzEoMSwgMSwgMCwgMCwgdGxiX3NpemUpKTsKKwkJbXRzcHIoTUFTMiwgVExCMV9NQVMyKEU1MDBfVExCX0VQTihyYW1fdGxiX2FkZHJlc3MpLAorCQkJCSAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApKTsKKwkJbXRzcHIoTUFTMywgVExCMV9NQVMzKEU1MDBfVExCX1JQTihyYW1fdGxiX2FkZHJlc3MpLAorCQkJCSAgICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEpKTsKKwkJYXNtIHZvbGF0aWxlKCJpc3luYzttc3luYzt0bGJ3ZTtpc3luYyIpOworCisJCWRlYnVnKCJERFI6IE1BUzA9MHglMDh4XG4iLCBUTEIxX01BUzAoMSwgcmFtX3RsYl9pbmRleCwgMCkpOworCQlkZWJ1ZygiRERSOiBNQVMxPTB4JTA4eFxuIiwgVExCMV9NQVMxKDEsIDEsIDAsIDAsIHRsYl9zaXplKSk7CisJCWRlYnVnKCJERFI6IE1BUzI9MHglMDh4XG4iLAorCQkgICAgICBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKHJhbV90bGJfYWRkcmVzcyksCisJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpOworCQlkZWJ1ZygiRERSOiBNQVMzPTB4JTA4eFxuIiwKKwkJICAgICAgVExCMV9NQVMzKEU1MDBfVExCX1JQTihyYW1fdGxiX2FkZHJlc3MpLAorCQkJCTAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEpKTsKKworCQlyYW1fdGxiX2FkZHJlc3MgKz0gKDB4MTAwMCA8PCAoKHRsYl9zaXplIC0gMSkgKiAyKSk7CisJCXJhbV90bGJfaW5kZXgrKzsKKwl9CisKKworCS8qCisJICogRmlyc3Qgc3VwcG9ydGVkIExBVyBzaXplIGlzIDE2TSwgYXQgTEFXQVJfU0laRV8xNk0gPT0gMjMuICBGbm9yZC4KKwkgKi8KKwlsYXdfc2l6ZSA9IDE5ICsgX19pbG9nMihtZW1zaXplKTsKKworCS8qCisJICogU2V0IHVwIExBV0JBUiBmb3IgYWxsIG9mIEREUi4KKwkgKi8KKwllY20tPmxhd2JhcjEgPSAoKENGR19ERFJfU0RSQU1fQkFTRSA+PiAxMikgJiAweGZmZmZmKTsKKwllY20tPmxhd2FyMSA9IChMQVdBUl9FTgorCQkgICAgICAgfCBMQVdBUl9UUkdUX0lGX0REUgorCQkgICAgICAgfCAoTEFXQVJfU0laRSAmIGxhd19zaXplKSk7CisJZGVidWcoIkREUjogTEFXQkFSMT0weCUwOHhcbiIsIGVjbS0+bGF3YmFyMSk7CisJZGVidWcoIkREUjogTEFSQVIxPTB4JTA4eFxuIiwgZWNtLT5sYXdhcjEpOworCisJLyoKKwkgKiBDb25maXJtIHRoYXQgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgbWVtb3J5IHdhcyBtYXBwZWQuCisJICovCisJcmV0dXJuIG1lbXNpemU7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfU1BEX0VFUFJPTSAqLwogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKQorI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKKwogLyoKICAqIEluaXRpYWxpemUgYWxsIG9mIG1lbW9yeSBmb3IgRUNDLCB0aGVuIGVuYWJsZSBlcnJvcnMuCiAgKi8KKwogdm9pZAogZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSkKIHsKQEAgLTQyMCw3ICsxMDc1LDcgQEAKIAkJaWYgKCgodW5zaWduZWQgaW50KXAgJiAweDFmKSA9PSAwKSB7CiAJCQlwcGNEY2J6KCh1bnNpZ25lZCBsb25nKSBwKTsKIAkJfQotCQkqcCA9ICh1bnNpZ25lZCBpbnQpMHhkZWFkYmVlZjsKKwkJKnAgPSAodW5zaWduZWQgaW50KUNPTkZJR19NRU1fSU5JVF9WQUxVRTsKIAkJaWYgKCgodW5zaWduZWQgaW50KXAgJiAweDFjKSA9PSAweDFjKSB7CiAJCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSBwKTsKIAkJfQpAQCAtNDU0LDcgKzExMDksMTAgQEAKIAkvKgogCSAqIEVuYWJsZSBlcnJvcnMgZm9yIEVDQy4KIAkgKi8KKwlkZWJ1ZygiRE1BIEREUjogZXJyX2Rpc2FibGUgPSAweCUwOHhcbiIsIGRkci0+ZXJyX2Rpc2FibGUpOwogCWRkci0+ZXJyX2Rpc2FibGUgPSAweDAwMDAwMDAwOwogCWFzbSgic3luYztpc3luYzttc3luYyIpOworCWRlYnVnKCJETUEgRERSOiBlcnJfZGlzYWJsZSA9IDB4JTA4eFxuIiwgZGRyLT5lcnJfZGlzYWJsZSk7CiB9Ci0jZW5kaWYJLyogQ09ORklHX0REUl9FQ0MgKi8KKworI2VuZGlmCS8qIENPTkZJR19ERFJfRUNDICAmJiAhIENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUiAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3BlZWQuYyBiL2NwdS9tcGM4NXh4L3NwZWVkLmMKaW5kZXggNzg3ZjdmYS4uZDczNjc0MiAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3BlZWQuYworKysgYi9jcHUvbXBjODV4eC9zcGVlZC5jCkBAIC04Miw3ICs4Miw3IEBACiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAJc3lzX2luZm9fdCBzeXNfaW5mbzsKLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4NTYwKQorI2lmIGRlZmluZWQoQ09ORklHX0NQTTIpCiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKIAl1aW50IHNjY3IsIGRmYnJnOwogCkBAIC05NCw3ICs5NCw3IEBACiAJZ2V0X3N5c19pbmZvICgmc3lzX2luZm8pOwogCWdkLT5jcHVfY2xrID0gc3lzX2luZm8uZnJlcVByb2Nlc3NvcjsKIAlnZC0+YnVzX2NsayA9IHN5c19pbmZvLmZyZXFTeXN0ZW1CdXM7Ci0jaWYgZGVmaW5lZChDT05GSUdfTVBDODU2MCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQogCWdkLT52Y29fb3V0ID0gMipzeXNfaW5mby5mcmVxU3lzdGVtQnVzOwogCWdkLT5jcG1fY2xrID0gZ2QtPnZjb19vdXQgLyAyOwogCWdkLT5zY2NfY2xrID0gZ2QtPnZjb19vdXQgLyA0OwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3RhcnQuUyBiL2NwdS9tcGM4NXh4L3N0YXJ0LlMKaW5kZXggYWYyOGViZS4uNWY3NWJjMSAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3RhcnQuUworKysgYi9jcHUvbXBjODV4eC9zdGFydC5TCkBAIC0xNTUsMTEgKzE1NSwxMyBAQAogCW10c3ByCU1DU1IscjAKIAltdHNwcglERUFSLHIwCiAKLQltdHNwcglEQkNSMCxyMAorCS8qIG5vdCBuZWVkZWQgYW5kIGNvbmZsaWN0cyB3aXRoIHNvbWUgZGVidWdnZXJzICovCisJLyogbXRzcHIJREJDUjAscjAgKi8KIAltdHNwcglEQkNSMSxyMAogCW10c3ByCURCQ1IyLHIwCi0JbXRzcHIJSUFDMSxyMAotCW10c3ByCUlBQzIscjAKKwkvKiBub3QgbmVlZGVkIGFuZCBjb25mbGljdHMgd2l0aCBzb21lIGRlYnVnZ2VycyAqLworCS8qIG10c3ByCUlBQzEscjAgKi8KKwkvKiBtdHNwcglJQUMyLHIwICovCiAJbXRzcHIJREFDMSxyMAogCW10c3ByCURBQzIscjAKIApAQCAtMTc0LDYgKzE3Niw5IEBACiAJbXRzcHIJQlVDU1IscjAJLyogZGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbiAqLwogCW10c3ByCU1BUzQscjAKIAltdHNwcglNQVM2LHIwCisjaWYgZGVmaW5lZChDT05GSUdfRU5BQkxFXzM2QklUX1BIWVMpCisJbXRzcHIJTUFTNyxyMAorI2VuZGlmCiAJaXN5bmMKIAogCS8qIFNldHVwIGludGVycnVwdCB2ZWN0b3JzICovCkBAIC0zNTgsNiArMzYzLDkgQEAKIAkvKiBFbmFibGUgVGltZSBCYXNlIGFuZCBTZWxlY3QgVGltZSBCYXNlIENsb2NrICovCiAJbGlzCXIwLEhJRDBfRU1DUEBoCQkvKiBFbmFibGUgbWFjaGluZSBjaGVjayAqLwogCW9yaQlyMCxyMCwweDQwMDAJCS8qIHRpbWUgYmFzZSBpcyBwcm9jZXNzb3IgY2xvY2sgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19FTkFCTEVfMzZCSVRfUEhZUykKKwlvcmkJcjAscjAsMHgwMDgwCQkvKiBlbmFibGUgTUFTNyB1cGRhdGVzICovCisjZW5kaWYKIAltdHNwcglISUQwLHIwCiAKICNpZiBkZWZpbmVkKENPTkZJR19BRERSX1NUUkVBTUlORykKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubXBjODN4eGFkcyBiL2RvYy9SRUFETUUubXBjODN4eGFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDM4Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tcGM4M3h4YWRzCkBAIC0wLDAgKzEsOTYgQEAKK0ZyZWVzY2FsZSBNUEM4M3h4IEFEUyBCb2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAuIFRvb2xjaGFpbiAvIEJ1aWxkaW5nCisKKyAgICAlIHNldGVudiBDUk9TU19DT01QSUxFIC91c3IvcG93ZXJwYy9iaW4vcG93ZXJwYy1saW51eC0KKworICAgICUgL3Vzci9wb3dlcnBjL2Jpbi9wb3dlcnBjLWxpbnV4LWdjYyAtdgorICAgIFJlYWRpbmcgc3BlY3MgZnJvbSAvdXNyL3Bvd2VycGMvbGliL2djYy9wb3dlcnBjLWxpbnV4LzMuNC4zL3NwZWNzCisgICAgQ29uZmlndXJlZCB3aXRoOiAuLi9jb25maWd1cmUgLS1wcmVmaXg9L3Vzci9wb3dlcnBjCisgICAgLS1leGVjLXByZWZpeD0vdXNyL3Bvd2VycGMgLS10YXJnZXQ9cG93ZXJwYy1saW51eCAtLWVuYWJsZS1zaGFyZWQKKyAgICAtLWRpc2FibGUtbmxzIC0tZGlzYWJsZS1tdWx0aWxpYiAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyssYWRhLGY3NyxvYmpjCisgICAgVGhyZWFkIG1vZGVsOiBwb3NpeAorICAgIGdjYyB2ZXJzaW9uIDMuNC4zIChEZWJpYW4pCisKKyAgICAlIC91c3IvcG93ZXJwYy9iaW4vcG93ZXJwYy1saW51eC1hcyAtdgorICAgIEdOVSBhc3NlbWJsZXIgdmVyc2lvbiAyLjE1IChwb3dlcnBjLWxpbnV4KSB1c2luZyBCRkQgdmVyc2lvbiAyLjE1CisKKworICAgICUgbWFrZSBNUEM4MzQ5QURTX2NvbmZpZworICAgIENvbmZpZ3VyaW5nIGZvciBNUEM4MzQ5QURTIGJvYXJkLi4uCisKKyAgICAlIG1ha2UKKworCisxLiBCb2FyZCBTd2l0Y2hlcyBhbmQgSnVtcGVycworCisKKzIuIE1lbW9yeSBNYXAKKworMi4xLiBUaGUgbWVtb3J5IG1hcCBzaG91bGQgbG9vayBwcmV0dHkgbXVjaCBsaWtlIHRoaXM6CisKKyAgICAgMHgwMDAwXzAwMDAgICAgIDB4N2ZmZl9mZmZmICAgICBERFIJCSAgICAgMkcKKyAgICAgMHg4MDAwXzAwMDAgICAgIDB4OWZmZl9mZmZmICAgICBQQ0kgTUVNCQkgICAgIDUxMk0KKyAgICAgMHhjMDAwXzAwMDAgICAgIDB4ZGZmZl9mZmZmICAgICBSYXBpZCBJTwkJICAgICA1MTJNCisgICAgIDB4ZTAwMF8wMDAwICAgICAweGUwMGZfZmZmZiAgICAgQ0NTUgkJICAgICAxTQorICAgICAweGUyMDBfMDAwMCAgICAgMHhlMmZmX2ZmZmYgICAgIFBDSSBJTwkJICAgICAxNk0KKyAgICAgMHhmMDAwXzAwMDAgICAgIDB4ZjdmZl9mZmZmICAgICBTRFJBTQkJICAgICAxMjhNCisgICAgIDB4ZjgwMF8wMDAwICAgICAweGY4MGZfZmZmZiAgICAgQkNTUgkJICAgICAxTQorICAgICAweGZlMDBfMDAwMCAgICAgMHhmZmZmX2ZmZmYgICAgIEZMQVNIIChib290IGJhbmspCSAgICAgMTZNCisKKworMy4gRGVmaW5pdGlvbnMKKworMy4xIEV4cGxhbmF0aW9uIG9mIE5FVyBkZWZpbml0aW9ucyBpbjoKKworCWluY2x1ZGUvY29uZmlncy9NUEM4MzQ5QURTLmgKKworICAgIENPTkZJR19NUEM4M3h4CSAgICBNUEM4M3h4IGZhbWlseQorICAgIENPTkZJR19NUEM4MzQ5CSAgICBNUEM4MzQ5IHNwZWNpZmljCisgICAgQ09ORklHX01QQzgzNDlBRFMJICAgIE1QQzgzNDlBRFMgYm9hcmQgc3BlY2lmaWMKKyAgICBDT05GSUdfVFNFQ19FTkVUCSAgICBVc2Ugb24tY2hpcCAxMC8xMDAvMTAwMCBldGhlcm5ldAorCisKKzQuIENvbXBpbGF0aW9uCisKKyAgICBBc3N1bWluZyB5b3UncmUgdXNpbmcgQkFTSCBzaGVsbDoKKworCWV4cG9ydCBDUk9TU19DT01QSUxFPXlvdXItY3Jvc3MtY29tcGlsZS1wcmVmaXgKKwljZCB1LWJvb3QKKwltYWtlIGRpc3RjbGVhbgorCW1ha2UgTVBDODM0OUFEU19jb25maWcKKwltYWtlCisKKzUuIERvd25sb2FkaW5nIGFuZCBGbGFzaGluZyBJbWFnZXMKKworNS4wIERvd25sb2FkIG92ZXIgc2VyaWFsIGxpbmUgdXNpbmcgS2VybWl0OgorCisJbG9hZGIKKwlbRHJvcCB0byBrZXJtaXQ6CisJICAgIF5cYworCSAgICBzZW5kIDx1LWJvb3QtYmluLWltYWdlPgorCSAgICBjCisJXQorCisKKyAgICBPciB2aWEgdGZ0cDoKKworICAgICAgICB0ZnRwIDEwMDAwIHUtYm9vdC5iaW4KKworNS4xIFJlZmxhc2ggVS1ib290IEltYWdlIHVzaW5nIFUtYm9vdAorCisgICAgdGZ0cCAxMDAwMCB1LWJvb3QuYmluCisgICAgcHJvdGVjdCBvZmYgZmUwMDAwMDAgZmUwOWZmZmYKKyAgICBlcmFzZSBmZTAwMDAwMCBmZTA5ZmZmZgorCisgICAgY3AuYiAxMDAwMCBmZTAwMDAwMCB4eHh4CitvcgorICAgIGNwLmIgMTAwMDAgZmUwMDAwMDAgYTAwMDAKKworWW91IG1pZ2h0IGhhdmUgdG8gc3VwcGx5IHRoZSBjb3JyZWN0IGJ5dGUgY291bnQgZm9yICd4eHh4JyBmcm9tCit0aGUgVEZUUC4gIE1heWJlIGEwMDAwIHdpbGwgd29yayB0b28sIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCitlcmFzZWQgc2VjdG9ycy4KKworCis2LiBOb3RlcwpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5tcGM4NXh4YWRzIGIvZG9jL1JFQURNRS5tcGM4NXh4YWRzCmluZGV4IDkzOWRlMjAuLjA4ZDY4MzEgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUubXBjODV4eGFkcworKysgYi9kb2MvUkVBRE1FLm1wYzg1eHhhZHMKQEAgLTEzNCw3ICsxMzQsNiBAQAogICAgIENPTkZJR19FNTAwCQkgICAgQk9PS0UgZTUwMCBmYW1pbHkoTW90b3JvbGEpCiAgICAgQ09ORklHX01QQzg1eHgJICAgIE1QQzg1NDAsTVBDODU2MCBhbmQgdGhlaXIgZGVyaXZhdGl2ZXMKICAgICBDT05GSUdfTVBDODU0MAkgICAgTVBDODU0MCBzcGVjaWZpYwotICAgIENPTkZJR19NUEM4NTYwCSAgICBNUEM4NTYwIHNwZWNpZmljCiAgICAgQ09ORklHX01QQzg1NDBBRFMJICAgIE1QQzg1NDBBRFMgYm9hcmQgc3BlY2lmaWMKICAgICBDT05GSUdfTVBDODU2MEFEUwkgICAgTVBDODU2MEFEUyBib2FyZCBzcGVjaWZpYwogICAgIENPTkZJR19UU0VDX0VORVQJICAgIFVzZSBvbi1jaGlwIDEwLzEwMC8xMDAwIGV0aGVybmV0IGZvciBuZXR3b3JraW5nCkBAIC0xNDQsNiArMTQzLDcgQEAKICAgICBDT05GSUdfRERSX0VDQwkgICAgb25seSBmb3IgRUNDIEREUiBtb2R1bGUKICAgICBDT05GSUdfRERSX0RMTAkgICAgRExMIGZpeCBvbiBzb21lIEFEUyBib2FyZHMgbmVlZGVkIGZvciBtb3JlCiAJCQkgICAgc3RhYmlsaXR5LgorICAgIENPTkZJR19IQVNfRkVDCSAgICBJZiBhbiBGRUMgaXMgb24gY2hpcCwgc2V0IHRvIDEsIGVsc2UgMC4KIAogT3RoZXIgdGhhbiB0aGUgYWJvdmUgZGVmaW5pdGlvbnMsIHRoZSByZXN0IGluIHRoZSBjb25maWcgZmlsZXMgYXJlCiBzdHJhaWdodGZvcndhcmQuCkBAIC0xOTEsMTAgKzE5MSwxMCBAQAogCiA0LjQgUmVmbGFzaCBVLWJvb3QgSW1hZ2UgdXNpbmcgVS1ib290CiAKLSAgICA9PiB0ZnRwIDEwMDAwIHUtYm9vdC5iaW4KLSAgICA9PiBwcm90ZWN0IG9mZiBmZmY4MDAwMCBmZmZmZmZmZgotICAgID0+IGVyYXNlIGZmZjgwMDAwIGZmZmZmZmZmCi0gICAgPT4gY3AuYiAxMDAwMCBmZmY4MDAwMCA4MDAwMAorICAgIHRmdHAgMTAwMDAgdS1ib290LmJpbgorICAgIHByb3RlY3Qgb2ZmIGZmZjgwMDAwIGZmZmZmZmZmCisgICAgZXJhc2UgZmZmODAwMDAgZmZmZmZmZmYKKyAgICBjcC5iIDEwMDAwIGZmZjgwMDAwIDgwMDAwCiAKIAogNC41IFJlZmxhc2ggVS1Cb290IHdpdGggYSBCREktMjAwMApkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5tcGM4NXh4Y2RzIGIvZG9jL1JFQURNRS5tcGM4NXh4Y2RzCmluZGV4IGUwZjQ5MTYuLmJjNWRiMGMgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUubXBjODV4eGNkcworKysgYi9kb2MvUkVBRE1FLm1wYzg1eHhjZHMKQEAgLTEzNSw4ICsxMzUsOCBAQAogICBTVzQ9MTAwMDEwMDAKIAogCi1DUFUgQ2FyZCBTd2l0Y2hlcwotLS0tLS0tLS0tLS0tLS0tLS0KKzg1NTUvNDEgQ1BVIENhcmQgU3dpdGNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTW9zdCBzd2l0Y2hlcyBvbiB0aGUgQ1BVIENhcmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAgSG93ZXZlciwgdGhlCiBmcmVxdWVuY3kgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyBTVzM6CkBAIC0xNjAsNiArMTYwLDQ1IEBACiAgIFNXND0xMTExMTExMAogCiAKKzg1NDggQ1BVIENhcmQgU3dpdGNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FuZCwganVzdCB0byBiZSBjb25mdXNpbmcsIGluIHRoaXMgc2V0IG9mIHN3aXRjaGVzOgorCisgICAgT04gID0gMQorICAgIE9GRiA9IDAKKworRGVmYXVsdAorICBTVzE9MTExMTExMDEKKyAgU1cyPTEwMDExMTExCisgIFNXMz0xMTAwMTAwMCAgICAoOFgpICgyOjEpCisgIFNXND0xMTExMDAxMQorCisgIFNXMz1YMDAwWFhYWCAgPT0gQ09SRTpDQ0IgICAgNDoxCisgICAgICBYMDAxWFhYWCAgPT0gQ09SRTpDQ0IgICAgOToyCisgICAgICBYMDEwWFhYWCAgPT0gQ09SRTpDQ0IgICAgMToxCisgICAgICBYMDExWFhYWCAgPT0gQ09SRTpDQ0IgICAgMzoyCisgICAgICBYMTAwWFhYWCAgPT0gQ09SRTpDQ0IgICAgMjoxCisgICAgICBYMTAxWFhYWCAgPT0gQ09SRTpDQ0IgICAgNToyCisgICAgICBYMTEwWFhYWCAgPT0gQ09SRTpDQ0IgICAgMzoxCisgICAgICBYMTExWFhYWCAgPT0gQ09SRTpDQ0IgICAgNzoyCisgICAgICBYWFhYMDAwMCAgPT0gQ0NCOlNZU0NMSyAxNjoxCisgICAgICBYWFhYMDAwMSAgPT0gUkVTRVJWRUQKKyAgICAgIFhYWFgwMDEwICA9PSBDQ0I6U1lTQ0xLICAyOjEKKyAgICAgIFhYWFgwMDExICA9PSBDQ0I6U1lTQ0xLICAzOjEKKyAgICAgIFhYWFgwMTAwICA9PSBDQ0I6U1lTQ0xLICA0OjEKKyAgICAgIFhYWFgwMTAxICA9PSBDQ0I6U1lTQ0xLICA1OjEKKyAgICAgIFhYWFgwMTEwICA9PSBDQ0I6U1lTQ0xLICA2OjEKKyAgICAgIFhYWFgwMTExICA9PSBSRVNFUlZFRAorICAgICAgWFhYWDEwMDAgID09IENDQjpTWVNDTEsgIDg6MQorICAgICAgWFhYWDEwMDEgID09IENDQjpTWVNDTEsgIDk6MQorICAgICAgWFhYWDEwMTAgID09IENDQjpTWVNDTEsgMTA6MQorICAgICAgWFhYWDEwMTEgID09IFJFU0VSVkVECisgICAgICBYWFhYMTEwMCAgPT0gQ0NCOlNZU0NMSyAxMjoxCisgICAgICBYWFhYMTEwMSAgPT0gQ0NCOlNZU0NMSyAyMDoxCisgICAgICBYWFhYMTExMCAgPT0gUkVTRVJWRUQKKyAgICAgIFhYWFgxMTExICA9PSBSRVNFUlZFRAorCisKIGVESU5LIEluZm8KIC0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMzQ2MWJiMS4uMjZhNTU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC00NSw3ICs0NSw3IEBACiAJICBzZXJpYWxfcGwwMTAubyBzZXJpYWxfcGwwMTEubyBzZXJpYWxfeHVhcnRsaXRlLm8gXAogCSAgc2w4MTFfdXNiLm8gc201MDEubyBzbWM5MTExMS5vIHNtaUx5bnhFTS5vIFwKIAkgIHN0YXR1c19sZWQubyBzeW01M2M4eHgubyBcCi0JICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIFwKKwkgIHRpX3BjaTE0MTBhLm8gdGlnb24zLm8gdHNlYy5vIFwKIAkgIHVzYmRjb3JlLm8gdXNiZGNvcmVfZXAwLm8gdXNiZGNvcmVfb21hcDE1MTAubyB1c2J0dHkubyBcCiAJICB2aWRlb21vZGVzLm8gdzgzYzU1M2YubyBcCiAJICBrczg2OTVldGgubwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvdHNlYy5jIGIvZHJpdmVycy90c2VjLmMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gY3B1L21wYzg1eHgvdHNlYy5jCnJlbmFtZSB0byBkcml2ZXJzL3RzZWMuYwppbmRleCBkMzI3YTZkLi4wYzhiMGRlIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC90c2VjLmMKKysrIGIvZHJpdmVycy90c2VjLmMKQEAgLTgsNyArOCw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCiAgKiAoQykgQ29weXJpZ2h0IDIwMDMsIE1vdG9yb2xhLCBJbmMuCi0gKiBtYWludGFpbmVkIGJ5IEpvbiBMb2VsaWdlciAobG9lbGlnZXJAZnJlZXNjYWxlLmNvbSkKICAqIGF1dGhvciBBbmR5IEZsZW1pbmcKICAqCiAgKi8KQEAgLTM1LDcgKzM0LDcgQEAKIAogc3RydWN0IHRzZWNfaW5mb19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBwaHlhZGRyOwotCXVuc2lnbmVkIGludCBnaWdhYml0OworCXUzMiBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGh5cmVnaWR4OwogfTsKIApAQCAtNDgsOCArNDcsOSBAQAogICogIHBoeWFkZHIgLSBUaGUgYWRkcmVzcyBvZiB0aGUgUEhZIHdoaWNoIGlzIGF0dGFjaGVkIHRvCiAgKgl0aGUgZ2l2ZW4gZGV2aWNlLgogICoKLSAqICBnaWdhYml0IC0gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZGV2aWNlCi0gKglzdXBwb3J0cyBnaWdhYml0IHNwZWVkIGV0aGVybmV0CisgKiAgZmxhZ3MgLSBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXZpY2UKKyAqCXN1cHBvcnRzIGdpZ2FiaXQgc3BlZWQgZXRoZXJuZXQsIGFuZCB3aGV0aGVyIGl0IHNob3VsZCBiZQorICoJaW4gcmVkdWNlZCBtb2RlLgogICoKICAqICBwaHlyZWdpZHggLSBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGljaCBldGhlcm5ldCBkZXZpY2UKICAqCWNvbnRyb2xzIHRoZSBNSUkgTWFuYWdlbWVudCByZWdpc3RlcnMgd2hpY2ggYXJlIGNvbm5lY3RlZApAQCAtNjksMjQgKzY5LDMzIEBACiAgKiAgIEZFQ19QSFlJRFgKICAqLwogc3RhdGljIHN0cnVjdCB0c2VjX2luZm9fc3RydWN0IHRzZWNfaW5mb1tdID0gewotI2lmZGVmIENPTkZJR19NUEM4NVhYX1RTRUMxCi0Je1RTRUMxX1BIWV9BRERSLCAxLCBUU0VDMV9QSFlJRFh9LAorI2lmIGRlZmluZWQoQ09ORklHX01QQzg1WFhfVFNFQzEpIHx8IGRlZmluZWQoQ09ORklHX01QQzgzWFhfVFNFQzEpCisJe1RTRUMxX1BIWV9BRERSLCBUU0VDX0dJR0FCSVQsIFRTRUMxX1BIWUlEWH0sCiAjZWxzZQogCXsgMCwgMCwgMH0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTVBDODVYWF9UU0VDMgotCXtUU0VDMl9QSFlfQUREUiwgMSwgVFNFQzJfUEhZSURYfSwKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUMyKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUMyKQorCXtUU0VDMl9QSFlfQUREUiwgVFNFQ19HSUdBQklULCBUU0VDMl9QSFlJRFh9LAogI2Vsc2UKIAl7IDAsIDAsIDB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01QQzg1WFhfRkVDCiAJe0ZFQ19QSFlfQUREUiwgMCwgRkVDX1BIWUlEWH0sCiAjZWxzZQorIyAgICBpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUMzKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUMzKQorCXtUU0VDM19QSFlfQUREUiwgVFNFQ19HSUdBQklUIHwgVFNFQ19SRURVQ0VELCBUU0VDM19QSFlJRFh9LAorIyAgICBlbHNlCiAJeyAwLCAwLCAwfSwKKyMgICAgZW5kaWYKKyMgICAgaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDNCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDNCkKKwl7VFNFQzRfUEhZX0FERFIsIFRTRUNfUkVEVUNFRCwgVFNFQzRfUEhZSURYfSwKKyMgICAgZWxzZQorCXsgMCwgMCwgMH0sCisjICAgIGVuZGlmCiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgTUFYQ09OVFJPTExFUlMgMworI2RlZmluZSBNQVhDT05UUk9MTEVSUwkoNCkKIAogc3RhdGljIGludCByZWxvY2F0ZWQgPSAwOwogCkBAIC0xMTUsNyArMTI0LDcgQEAKIC8qIEluaXRpYWxpemUgZGV2aWNlIHN0cnVjdHVyZS4gUmV0dXJucyBzdWNjZXNzIGlmIFBIWQogICogaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkIChpLmUuIGlmIGl0IHJlY29nbml6ZXMgdGhlIFBIWSkKICAqLwotaW50IHRzZWNfaW5pdGlhbGl6ZShiZF90ICpiaXMsIGludCBpbmRleCkKK2ludCB0c2VjX2luaXRpYWxpemUoYmRfdCAqYmlzLCBpbnQgaW5kZXgsIGNoYXIgKmRldm5hbWUpCiB7CiAJc3RydWN0IGV0aF9kZXZpY2UqIGRldjsKIAlpbnQgaTsKQEAgLTEzOSw5ICsxNDgsOSBAQAogCQkJdHNlY19pbmZvW2luZGV4XS5waHlyZWdpZHgqVFNFQ19TSVpFKTsKIAogCXByaXYtPnBoeWFkZHIgPSB0c2VjX2luZm9baW5kZXhdLnBoeWFkZHI7Ci0JcHJpdi0+Z2lnYWJpdCA9IHRzZWNfaW5mb1tpbmRleF0uZ2lnYWJpdDsKKwlwcml2LT5mbGFncyA9IHRzZWNfaW5mb1tpbmRleF0uZmxhZ3M7CiAKLQlzcHJpbnRmKGRldi0+bmFtZSwgIkVORVQlZCIsIGluZGV4KTsKKwlzcHJpbnRmKGRldi0+bmFtZSwgZGV2bmFtZSk7CiAJZGV2LT5pb2Jhc2UgPSAwOwogCWRldi0+cHJpdiAgID0gcHJpdjsKIAlkZXYtPmluaXQgICA9IHRzZWNfaW5pdDsKQEAgLTIyNiw3ICsyMzUsNyBAQAogCiAJcmVnYmFzZS0+bWlpbWFkZCA9IChwaHlpZCA8PCA4KSB8IHJlZ251bTsKIAlyZWdiYXNlLT5taWltY29uID0gdmFsdWU7Ci0JYXNtKCJtc3luYyIpOworCWFzbSgic3luYyIpOwogCiAJdGltZW91dD0xMDAwMDAwOwogCXdoaWxlKChyZWdiYXNlLT5taWltaW5kICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pOwpAQCAtMjUxLDExICsyNjAsMTEgQEAKIAogCS8qIENsZWFyIHRoZSBjb21tYW5kIHJlZ2lzdGVyLCBhbmQgd2FpdCAqLwogCXJlZ2Jhc2UtPm1paW1jb20gPSAwOwotCWFzbSgibXN5bmMiKTsKKwlhc20oInN5bmMiKTsKIAogCS8qIEluaXRpYXRlIGEgcmVhZCBjb21tYW5kLCBhbmQgd2FpdCAqLwogCXJlZ2Jhc2UtPm1paW1jb20gPSBNSUlNX1JFQURfQ09NTUFORDsKLQlhc20oIm1zeW5jIik7CisJYXNtKCJzeW5jIik7CiAKIAkvKiBXYWl0IGZvciB0aGUgdGhlIGluZGljYXRpb24gdGhhdCB0aGUgcmVhZCBpcyBkb25lICovCiAJd2hpbGUoKHJlZ2Jhc2UtPm1paW1pbmQgJiAoTUlJTUlORF9OT1RWQUxJRCB8IE1JSU1JTkRfQlVTWSkpKTsKQEAgLTI4MywxNCArMjkyLDE0IEBACiAJCXJlZ3MtPnRiaXBhID0gVEJJUEFfVkFMVUU7CiAJCXJlZ3MgPSAodm9sYXRpbGUgdHNlY190ICopKFRTRUNfQkFTRV9BRERSICsgVFNFQ19TSVpFKTsKIAkJcmVncy0+dGJpcGEgPSBUQklQQV9WQUxVRTsKLQkJYXNtKCJtc3luYyIpOworCQlhc20oInN5bmMiKTsKIAl9CiAKIAkvKiBSZXNldCBNSUkgKGR1ZSB0byBuZXcgYWRkcmVzc2VzKSAqLwogCXByaXYtPnBoeXJlZ3MtPm1paW1jZmcgPSBNSUlNQ0ZHX1JFU0VUOwotCWFzbSgibXN5bmMiKTsKKwlhc20oInN5bmMiKTsKIAlwcml2LT5waHlyZWdzLT5taWltY2ZnID0gTUlJTUNGR19JTklUX1ZBTFVFOwotCWFzbSgibXN5bmMiKTsKKwlhc20oInN5bmMiKTsKIAl3aGlsZShwcml2LT5waHlyZWdzLT5taWltaW5kICYgTUlJTUlORF9CVVNZKTsKIAogCWlmKDAgPT0gcmVsb2NhdGVkKQpAQCAtMzE4LDcgKzMyNyw3IEBACiAvKiBGb3IgMTAvMTAwLCB0aGUgdmFsdWUgaXMgc2xpZ2h0bHkgZGlmZmVyZW50ICovCiB1aW50IG1paV9jcl9pbml0KHVpbnQgbWlpX3JlZywgc3RydWN0IHRzZWNfcHJpdmF0ZSAqcHJpdikKIHsKLQlpZihwcml2LT5naWdhYml0KQorCWlmKHByaXYtPmZsYWdzICYgVFNFQ19HSUdBQklUKQogCQlyZXR1cm4gTUlJTV9DT05UUk9MX0lOSVQ7CiAJZWxzZQogCQlyZXR1cm4gTUlJTV9DUl9JTklUOwpAQCAtNDI5LDcgKzQzOCw3IEBACiAJZm9yKHBoeWlkPTA7cGh5aWQ8NDtwaHlpZCsrKSB7CiAJCXJlZ2Jhc2UtPm1paW1hZGQgPSAocGh5aWQgPDwgOCkgfCBtaWlfcmVnOwogCQlyZWdiYXNlLT5taWltY29uID0gTUlJTV9DSVM4MjA0X1NMRURDT05fSU5JVDsKLQkJYXNtKCJtc3luYyIpOworCQlhc20oInN5bmMiKTsKIAogCQl0aW1lb3V0PTEwMDAwMDA7CiAJCXdoaWxlKChyZWdiYXNlLT5taWltaW5kICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pOwpAQCAtNDM4LDYgKzQ0NywxMyBAQAogCXJldHVybiBNSUlNX0NJUzgyMDRfU0xFRENPTl9JTklUOwogfQogCit1aW50IG1paV9jaXM4MjA0X3NldG1vZGUodWludCBtaWlfcmVnLCBzdHJ1Y3QgdHNlY19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5mbGFncyAmIFRTRUNfUkVEVUNFRCkKKwkJcmV0dXJuIE1JSU1fQ0lTODIwNF9FUEhZQ09OX0lOSVQgfCBNSUlNX0NJUzgyMDRfRVBIWUNPTl9SR01JSTsKKwllbHNlCisJCXJldHVybiBNSUlNX0NJUzgyMDRfRVBIWUNPTl9JTklUOworfQogCiAvKiBJbml0aWFsaXplZCByZXF1aXJlZCByZWdpc3RlcnMgdG8gYXBwcm9wcmlhdGUgdmFsdWVzLCB6ZXJvaW5nCiAgKiB0aG9zZSB3ZSBkb24ndCBjYXJlIGFib3V0ICh1bmxlc3MgemVybyBpcyBiYWQsIGluIHdoaWNoIGNhc2UsCkBAIC01MDcsNiArNTIzLDE1IEBACiAJCQljYXNlIDEwOgogCQkJCXJlZ3MtPm1hY2NmZzIgPSAoKHJlZ3MtPm1hY2NmZzImfihNQUNDRkcyX0lGKSkKIAkJCQkJfCBNQUNDRkcyX01JSSk7CisKKwkJCQkvKiBJZiBXZSdyZSBpbiByZWR1Y2VkIG1vZGUsIHdlIG5lZWQKKwkJCQkgKiB0byBzYXkgd2hldGhlciB3ZSdyZSAxMCBvciAxMDAgTUIuCisJCQkJICovCisJCQkJaWYgKChwcml2LT5zcGVlZCA9PSAxMDApCisJCQkJICAgICYmIChwcml2LT5mbGFncyAmIFRTRUNfUkVEVUNFRCkpCisJCQkJCXJlZ3MtPmVjbnRybCB8PSBFQ05UUkxfUjEwMDsKKwkJCQllbHNlCisJCQkJCXJlZ3MtPmVjbnRybCAmPSB+KEVDTlRSTF9SMTAwKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJcHJpbnRmKCIlczogU3BlZWQgd2FzIGJhZFxuIiwgZGV2LT5uYW1lKTsKQEAgLTczMSw3ICs3NTYsNyBAQAogCQkvKiBDb25maWd1cmUgc29tZSBiYXNpYyBzdHVmZiAqLwogCQl7TUlJTV9DT05UUk9MLCBNSUlNX0NPTlRST0xfSU5JVCwgJm1paV9jcl9pbml0fSwKIAkJe01JSU1fQ0lTODIwNF9TTEVEX0NPTiwgTUlJTV9DSVM4MjA0X1NMRURDT05fSU5JVCwgJm1paV9jaXM4MjA0X2ZpeGxlZH0sCi0JCXtNSUlNX0NJUzgyMDRfRVBIWV9DT04sIE1JSU1fQ0lTODIwNF9FUEhZQ09OX0lOSVQsIE5VTEx9LAorCQl7TUlJTV9DSVM4MjA0X0VQSFlfQ09OLCBNSUlNX0NJUzgyMDRfRVBIWUNPTl9JTklULCAmbWlpX2NpczgyMDRfc2V0bW9kZX0sCiAJCXttaWltX2VuZCx9CiAJfSwKIAkoc3RydWN0IHBoeV9jbWRbXSkgeyAvKiBzdGFydHVwICovCmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC90c2VjLmggYi9kcml2ZXJzL3RzZWMuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBjcHUvbXBjODV4eC90c2VjLmgKcmVuYW1lIHRvIGRyaXZlcnMvdHNlYy5oCmluZGV4IGUyNDM1MWEuLjE1OTYxZDcgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3RzZWMuaAorKysgYi9kcml2ZXJzL3RzZWMuaApAQCAtMTgsMTEgKzE4LDIyIEBACiAjZGVmaW5lIF9fVFNFQ19ICiAKICNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlIDxtcGM4NXh4Lmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKLSNkZWZpbmUgVFNFQ19CQVNFX0FERFIJKENGR19JTU1SICsgMHgyNDAwMCkKKyNpZm5kZWYgQ0ZHX1RTRUMxX09GRlNFVAorICAgICNkZWZpbmUgQ0ZHX1RTRUMxX09GRlNFVAkoMHgyNDAwMCkKKyNlbmRpZgorCiAjZGVmaW5lIFRTRUNfU0laRQkweDAxMDAwCiAKKy8qIEZJWE1FOiAgU2hvdWxkIHRoZXNlIGJlIHB1c2hlZCBiYWNrIHRvIDgzeHggYW5kIDg1eHggY29uZmlnIGZpbGVzPyAqLworI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisgICAgI2RlZmluZSBUU0VDX0JBU0VfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfVFNFQzFfT0ZGU0VUKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKKyAgICAjZGVmaW5lIFRTRUNfQkFTRV9BRERSCShDRkdfSU1NUkJBUiArIENGR19UU0VDMV9PRkZTRVQpCisjZW5kaWYKKworCiAjZGVmaW5lIE1BQ19BRERSX0xFTiA2CiAKIC8qICNkZWZpbmUgVFNFQ19USU1FT1VUIAkxMDAwMDAwICovCkBAIC01MSw2ICs2Miw3IEBACiAKICNkZWZpbmUgRUNOVFJMX0lOSVRfU0VUVElOR1MJMHgwMDAwMTAwMAogI2RlZmluZSBFQ05UUkxfVEJJX01PREUgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVDTlRSTF9SMTAwCQkweDAwMDAwMDA4CiAKICNkZWZpbmUgbWlpbV9lbmQgLTIKICNkZWZpbmUgbWlpbV9yZWFkIC0xCkBAIC0xMDcsNiArMTE5LDcgQEAKIC8qIENpY2FkYSA4MjA0IEV4dGVuZGVkIFBIWSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgTUlJTV9DSVM4MjA0X0VQSFlfQ09OCQkweDE3CiAjZGVmaW5lIE1JSU1fQ0lTODIwNF9FUEhZQ09OX0lOSVQJMHgwMDA2CisjZGVmaW5lIE1JSU1fQ0lTODIwNF9FUEhZQ09OX1JHTUlJCTB4MTAwMAogCiAvKiBDaWNhZGEgODIwNCBTZXJpYWwgTEVEIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJTV9DSVM4MjA0X1NMRURfQ09OCQkweDFiCkBAIC00MjQsMTIgKzQzNywxOCBAQAogCXVpbnQJcmVzYzAwWzI1Nl07CiB9IHRzZWNfdDsKIAorI2RlZmluZSBUU0VDX0dJR0FCSVQgKDEpCisKKy8qIFRoaXMgZmxhZyBjdXJyZW50bHkgb25seSBoYXMKKyAqIG1lYW5pbmcgaWYgd2UncmUgdXNpbmcgdGhlIGVUU0VDICovCisjZGVmaW5lIFRTRUNfUkVEVUNFRCAoMSA8PCAxKQorCiBzdHJ1Y3QgdHNlY19wcml2YXRlIHsKIAl2b2xhdGlsZSB0c2VjX3QgKnJlZ3M7CiAJdm9sYXRpbGUgdHNlY190ICpwaHlyZWdzOwogCXN0cnVjdCBwaHlfaW5mbyAqcGh5aW5mbzsKIAl1aW50IHBoeWFkZHI7Ci0JdWludCBnaWdhYml0OworCXUzMiBmbGFnczsKIAl1aW50IGxpbms7CiAJdWludCBkdXBsZXhpdHk7CiAJdWludCBzcGVlZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9lMzAwLmggYi9pbmNsdWRlL2FzbS1wcGMvZTMwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODAwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZTMwMC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIExpYmVydHkgRXJhbiAobGliZXJ0eUBmcmVlc2NhbGUuY29tKQorICovCisKKyNpZm5kZWYJX19FMzAwX0hfXworI2RlZmluZSBfX0UzMDBfSF9fCisKKy8qCisgKiBlMzAwIFByb2Nlc3NvciBWZXJzaW9uICYgUmV2aXNpb24gTnVtYmVycworICovCisjZGVmaW5lIFBWUl84M3h4IDB4ODA4MzAwMDAKKyNkZWZpbmUgUFZSXzgzNDlfUkVWMTAgKFBWUl84M3h4IHwgMHgwMDEwKQorI2RlZmluZSBQVlJfODM0OV9SRVYxMSAoUFZSXzgzeHggfCAweDAwMTEpCisKKy8qCisgKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbi1EZXBlbmRlbnQgUmVnaXN0ZXIgMCAoSElEMCkKKyAqLworCisvKiAjZGVmaW5lIEhJRDAgMTAwOCBhbHJlYWR5IGRlZmluZWQgaW4gcHJvY2Vzc29yLmggKi8KKyNkZWZpbmUgSElEMF9NQVNLX01BQ0hJTkVfQ0hFQ0sgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSElEMF9FTkFCTEVfTUFDSElORV9DSEVDSyAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBISUQwX0RJU0FCTEVfQ0FDSEVfUEFSSVRZICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBISUQwX0VOQUJMRV9DQUNIRV9QQVJJVFkgICAgICAgICAgICAgMHg0MDAwMDAwMAorCisjZGVmaW5lIEhJRDBfRElTQUJMRV9BRERSRVNTX1BBUklUWSAgICAgICAgICAweDAwMDAwMDAwIC8qIG9uIG1wYzgzNDlhZHMgbXVzdCBiZSBkaXNhYmxlZCAqLworI2RlZmluZSBISUQwX0VOQUJMRV9BRERSRVNTX1BBUklUWSAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIEhJRDBfRElTQUJMRV9EQVRBX1BBUklUWSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIG9uIG1wYzgzNDlhZHMgbXVzdCBiZSBkaXNhYmxlZCAqLworI2RlZmluZSBISUQwX0VOQUJMRV9EQVRFX1BBUklUWSAgICAgICAgICAgICAgMHgxMDAwMDAwMAorCisjZGVmaW5lIEhJRDBfQ09SRV9DTEtfT1VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhJRDBfQ09SRV9DTEtfT1VUX0RJVl8yICAgICAgICAgICAgICAweDA4MDAwMDAwCisKKyNkZWZpbmUgSElEMF9FTkFCTEVfQVJUUllfT1VUX1BSRUNIQVJHRSAgICAgIDB4MDAwMDAwMDAgLyogb24gbXBjODM0OWFkcyBtdXN0IGJlIGVuYWJsZWQgKi8KKyNkZWZpbmUgSElEMF9ESVNBQkxFX0FSVFJZX09VVF9QUkVDSEFSR0UgICAgIDB4MDEwMDAwMDAKKworI2RlZmluZSBISUQwX0RJU0FCTEVfRE9TRV9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBISUQwX0VOQUJMRV9ET1NFX01PREUgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorCisjZGVmaW5lIEhJRDBfRElTQUJMRV9OQVBfTU9ERSAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhJRDBfRU5BQkxFX05BUF9NT0RFICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisKKyNkZWZpbmUgSElEMF9ESVNBQkxFX1NMRUVQX01PREUgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSElEMF9FTkFCTEVfU0xFRVBfTU9ERSAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKworI2RlZmluZSBISUQwX0RJU0FCTEVfRFlOQU1JQ19QT1dFUl9NQU5BR01FTlQgMHgwMDAwMDAwMAorI2RlZmluZSBISUQwX0VOQUJMRV9EWU5BTUlDX1BPV0VSX01BTkFHTUVOVCAgMHgwMDEwMDAwMAorCisjZGVmaW5lIEhJRDBfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisKKyNkZWZpbmUgSElEMF9ESVNBQkxFX0lOU1RSVUNUSU9OX0NBQ0hFICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSElEMF9FTkFCTEVfSU5TVFJVQ1RJT05fQ0FDSEUgICAgICAgIDB4MDAwMDgwMDAKKworI2RlZmluZSBISUQwX0RJU0FCTEVfREFUQV9DQUNIRSAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBISUQwX0VOQUJMRV9EQVRBX0NBQ0hFICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisjZGVmaW5lIEhJRDBfTE9DS19JTlNUUlVDVElPTl9DQUNIRSAgICAgICAgICAweDAwMDAyMDAwCisKKyNkZWZpbmUgSElEMF9MT0NLX0RBVEFfQ0FDSEUgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKworI2RlZmluZSBISUQwX0lOVkFMSURBVEVfSU5TVFJVQ1RJT05fQ0FDSEUgICAgMHgwMDAwMDgwMAorCisjZGVmaW5lIEhJRDBfSU5WQUxJREFURV9EQVRBX0NBQ0hFICAgICAgICAgICAweDAwMDAwNDAwCisKKyNkZWZpbmUgSElEMF9ESVNBQkxFX01fQklUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSElEMF9FTkFCTEVfTV9CSVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworI2RlZmluZSBISUQwX0ZCSU9CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisjZGVmaW5lIEhJRDBfRElTQUJMRV9BRERSRVNTX0JST0FEQ0FTVCAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhJRDBfRU5BQkxFX0FERFJFU1NfQlJPQURDQVNUICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgSElEMF9FTkFCTEVfTk9PUF9EQ0FDSEVfSU5TVFJVQ1RJT04gIDB4MDAwMDAwMDAKKyNkZWZpbmUgSElEMF9ESVNBQkxFX05PT1BfRENBQ0hFX0lOU1RSVUNUSU9OIDB4MDAwMDAwMDEKKworLyoKKyAqIEhhcmR3YXJlIEltcGxlbWVudGF0aW9uLURlcGVuZGVudCBSZWdpc3RlciAyIChISUQyKQorICovCisjZGVmaW5lIEhJRDIJCTEwMTEKKworI2RlZmluZSBISUQyX0xFVCAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEhJRDJfSEJFICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSElEMl9JV0xDS18wMDAgMHgwMDAwMDAwMCAvKiBubyB3YXlzIGxvY2tlZCAqLworI2RlZmluZSBISUQyX0lXTENLXzAwMSAweDAwMDAyMDAwIC8qIHdheSAwIGxvY2tlZCAqLworI2RlZmluZSBISUQyX0lXTENLXzAxMCAweDAwMDA0MDAwIC8qIHdheSAwIHRocm91Z2ggd2F5IDEgbG9ja2VkICovCisjZGVmaW5lIEhJRDJfSVdMQ0tfMDExIDB4MDAwMDYwMDAgLyogd2F5IDAgdGhyb3VnaCB3YXkgMiBsb2NrZWQgKi8KKyNkZWZpbmUgSElEMl9JV0xDS18xMDAgMHgwMDAwODAwMCAvKiB3YXkgMCB0aHJvdWdoIHdheSAzIGxvY2tlZCAqLworI2RlZmluZSBISUQyX0lXTENLXzEwMSAweDAwMDBBMDAwIC8qIHdheSAwIHRocm91Z2ggd2F5IDQgbG9ja2VkICovCisjZGVmaW5lIEhJRDJfSVdMQ0tfMTEwIDB4MDAwMEMwMDAgLyogd2F5IDAgdGhyb3VnaCB3YXkgNSBsb2NrZWQgKi8KKworCisvKiBCQVQgKGJsb2NrIGFkZHJlc3MgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgQkFUVV9CRVBJX01TSwkgICAgMHhmZmZlMDAwMAorI2RlZmluZSBCQVRVX0JMX01TSyAgICAgICAgIDB4MDAwMDFmZmMKKworI2RlZmluZSBCQVRVX0JMXzEyOEsgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQkFUVV9CTF8yNTZLICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEJBVFVfQkxfNTEySyAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZSBCQVRVX0JMXzFNICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgQkFUVV9CTF8yTSAgICAgICAgICAweDAwMDAwMDNjCisjZGVmaW5lIEJBVFVfQkxfNE0gICAgICAgICAgMHgwMDAwMDA3YworI2RlZmluZSBCQVRVX0JMXzhNICAgICAgICAgIDB4MDAwMDAwZmMKKyNkZWZpbmUgQkFUVV9CTF8xNk0gICAgICAgICAweDAwMDAwMWZjCisjZGVmaW5lIEJBVFVfQkxfMzJNICAgICAgICAgMHgwMDAwMDNmYworI2RlZmluZSBCQVRVX0JMXzY0TSAgICAgICAgIDB4MDAwMDA3ZmMKKyNkZWZpbmUgQkFUVV9CTF8xMjhNICAgICAgICAweDAwMDAwZmZjCisjZGVmaW5lIEJBVFVfQkxfMjU2TSAgICAgICAgMHgwMDAwMWZmYworCisjZGVmaW5lIEJBVFVfVlMgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBCQVRVX1ZQICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBCQVRMX0JSUE5fTVNLICAgICAgIDB4ZmZmZTAwMDAKKyNkZWZpbmUgQkFUTF9XSU1HX01TSyAgICAgICAweDAwMDAwMDc4CisKKyNkZWZpbmUgQkFUTF9XUklURVRIUk9VR0ggICAweDAwMDAwMDQwCisjZGVmaW5lIEJBVExfQ0FDSEVJTkhJQklUICAgMHgwMDAwMDAyMAorI2RlZmluZSBCQVRMX01FTUNPSEVSRU5DRSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQkFUTF9HVUFSREVEU1RPUkFHRSAweDAwMDAwMDA4CisKKyNkZWZpbmUgQkFUTF9QUF9NU0sgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEJBVExfUFBfMDAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBObyBhY2Nlc3MgKi8KKyNkZWZpbmUgQkFUTF9QUF8wMSAgICAgICAgICAweDAwMDAwMDAxIC8qIFJlYWQtb25seSAqLworI2RlZmluZSBCQVRMX1BQXzEwICAgICAgICAgIDB4MDAwMDAwMDIgLyogUmVhZC13cml0ZSAqLworI2RlZmluZSBCQVRMX1BQXzExICAgICAgICAJMHgwMDAwMDAwMworCisjZW5kaWYJLyogX19FMzAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmggYi9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaAppbmRleCBjODAwZjYzLi45NjgxYTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaApAQCAtMjMsNiArMjMsOSBAQAogCiAjaWZuZGVmCV9fQVNNX0dCTF9EQVRBX0gKICNkZWZpbmUgX19BU01fR0JMX0RBVEFfSAorCisjaW5jbHVkZSAiYXNtL3R5cGVzLmgiCisKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlIGlzIHBsYWNlZCBpbiBzb21lIG1lbW9yeSB3aWNoIGlzCiAgKiBhdmFpbGFibGUgdmVyeSBlYXJseSBhZnRlciBib290IChsaWtlIERQUkFNIG9uIE1QQzh4eC9NUEM4Mnh4LCBvcgpAQCAtMzksMTMgKzQyLDI3IEBACiAJdW5zaWduZWQgbG9uZwliYXVkcmF0ZTsKIAl1bnNpZ25lZCBsb25nCWNwdV9jbGs7CS8qIENQVSBjbG9jayBpbiBIeiEJCSovCiAJdW5zaWduZWQgbG9uZwlidXNfY2xrOwotI2lmIGRlZmluZWQoQ09ORklHXzgyNjApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NjApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikKIAkvKiBUaGVyZSBhcmUgbWFueSBjbG9ja3Mgb24gdGhlIE1QQzgyNjAgLSBzZWUgcGFnZSA5LTUgKi8KIAl1bnNpZ25lZCBsb25nCXZjb19vdXQ7CiAJdW5zaWduZWQgbG9uZwljcG1fY2xrOwogCXVuc2lnbmVkIGxvbmcJc2NjX2NsazsKIAl1bnNpZ25lZCBsb25nCWJyZ19jbGs7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQorCS8qIFRoZXJlIGFyZSBvdGhlciBjbG9ja3MgaW4gdGhlIE1QQzgzWFggKi8KKwl1MzIgY3NiX2NsazsKKwl1MzIgdHNlYzFfY2xrOworCXUzMiB0c2VjMl9jbGs7CisJdTMyIGNvcmVfY2xrOworCXUzMiB1c2JtcGhfY2xrOworCXUzMiB1c2Jkcl9jbGs7CisJdTMyIGkyY19jbGs7CisJdTMyIGVuY19jbGs7CisJdTMyIGxiaXVfY2xrOworCXUzMiBsY2xrX2NsazsKKwl1MzIgZGRyX2NsazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCiAJdW5zaWduZWQgbG9uZwlpcGJfY2xrOwogCXVuc2lnbmVkIGxvbmcJcGNpX2NsazsKQEAgLTY0LDcgKzgxLDcgQEAKIAl1bnNpZ25lZCBsb25nCWVudl9hZGRyOwkvKiBBZGRyZXNzICBvZiBFbnZpcm9ubWVudCBzdHJ1Y3QJKi8KIAl1bnNpZ25lZCBsb25nCWVudl92YWxpZDsJLyogQ2hlY2tzdW0gb2YgRW52aXJvbm1lbnQgdmFsaWQ/CSovCiAJdW5zaWduZWQgbG9uZwloYXZlX2NvbnNvbGU7CS8qIHNlcmlhbF9pbml0KCkgd2FzIGNhbGxlZAkJKi8KLSNpZiBkZWZpbmVkKENGR19BTExPQ19EUFJBTSkgfHwgZGVmaW5lZChDT05GSUdfODI2MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU2MCkKKyNpZiBkZWZpbmVkKENGR19BTExPQ19EUFJBTSkgfHwgZGVmaW5lZChDT05GSUdfQ1BNMikKIAl1bnNpZ25lZCBpbnQJZHBfYWxsb2NfYmFzZTsKIAl1bnNpZ25lZCBpbnQJZHBfYWxsb2NfdG9wOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaTJjLmggYi9pbmNsdWRlL2FzbS1wcGMvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0YWMwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pMmMuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIEZyZWVzY2FsZSBJMkMgQ29udHJvbGxlcgorICoKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgaW5jb3Jwb3JhdGVkCisgKiBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogKEMpIENvcHlyaWdodCAyMDAzLCBNb3Rvcm9sYSwgSW5jLgorICogYXV0aG9yOiBFcmFuIExpYmVydHkgKGxpYmVydHlAZnJlZXNjYWxlLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fSTJDX0hfCisjZGVmaW5lIF9BU01fSTJDX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgaTJjCit7CisgICAgdTggYWRyOyAgICAgICAgICAvKio8IEkyQyBzbGF2ZSBhZGRyZXNzICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQURSCSAgICAgIDB4RkUKKyNkZWZpbmUgSTJDX0FEUl9TSElGVCAxCisjZGVmaW5lIEkyQ19BRFJfUkVTICAgfihJMkNfQURSKQorICAgIHU4IHJlczBbM107CisgICAgdTggZmRyOyAgICAgICAgICAvKio8IEkyQyBmcmVxdWVuY3kgZGl2aWRlciByZWdpc3RlciAqLworI2RlZmluZSBJQzJfRkRSICAgICAgIDB4M0YKKyNkZWZpbmUgSUMyX0ZEUl9TSElGVCAwCisjZGVmaW5lIElDMl9GRFJfUkVTICAgfihJQzJfRkRSKQorICAgIHU4IHJlczFbM107CisgICAgdTggY3I7ICAgICAgICAgICAvKio8IEkyQyBjb250cm9sIHJlZGlzdGVyICAgICAgICAgICAqLworI2RlZmluZSBJMkNfQ1JfTUVOCSAgMHg4MAorI2RlZmluZSBJMkNfQ1JfTUlFTgkgIDB4NDAKKyNkZWZpbmUgSTJDX0NSX01TVEEgICAweDIwCisjZGVmaW5lIEkyQ19DUl9NVFggICAgMHgxMAorI2RlZmluZSBJMkNfQ1JfVFhBSyAgIDB4MDgKKyNkZWZpbmUgSTJDX0NSX1JTVEEgICAweDA0CisjZGVmaW5lIEkyQ19DUl9CQ1NUICAgMHgwMQorICAgIHU4IHJlczJbM107CisgICAgdTggc3I7ICAgICAgICAgICAvKio8IEkyQyBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfU1JfTUNGICAgIDB4ODAKKyNkZWZpbmUgSTJDX1NSX01BQVMgICAweDQwCisjZGVmaW5lIEkyQ19TUl9NQkIgICAgMHgyMAorI2RlZmluZSBJMkNfU1JfTUFMICAgIDB4MTAKKyNkZWZpbmUgSTJDX1NSX0JDU1RNICAweDA4CisjZGVmaW5lIEkyQ19TUl9TUlcgICAgMHgwNAorI2RlZmluZSBJMkNfU1JfTUlGICAgIDB4MDIKKyNkZWZpbmUgSTJDX1NSX1JYQUsgICAweDAxCisgICAgdTggcmVzM1szXTsKKyAgICB1OCBkcjsgICAgICAgICAgIC8qKjwgSTJDIGRhdGEgcmVnaXN0ZXIgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19EUiAweEZGCisjZGVmaW5lIEkyQ19EUl9TSElGVCAwCisjZGVmaW5lIEkyQ19EUl9SRVMgfihJMkNfRFIpCisgICAgdTggcmVzNFszXTsKKyAgICB1OCBkZnNycjsgICAgICAgIC8qKjwgSTJDIGRpZ2l0YWwgZmlsdGVyIHNhbXBsaW5nIHJhdGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX0RGU1JSIDB4M0YKKyNkZWZpbmUgSTJDX0RGU1JSX1NISUZUIDAKKyNkZWZpbmUgSTJDX0RGU1JSX1JFUyB+KEkyQ19EUikKKyAgICB1OCByZXM1WzNdOworICAgIHU4IHJlczZbMHhFOF07Cit9IGkyY190OworCisjaWZuZGVmIENGR19IWgorI2Vycm9yIENGR19IWiBpcyBub3QgZGVmaW5lZCBpbiAvaW5jbHVkZS9jb25maWdzLyR7Qk9BUkR9LmgKKyNlbmRpZgorI2RlZmluZSBJMkNfVElNRU9VVCAoQ0ZHX0haLzQpCisKKyNpZm5kZWYgQ0ZHX0lNTVJCQVIKKyNlcnJvciBDRkdfSU1NUkJBUiBpcyBub3QgZGVmaW5lZCBpbiAvaW5jbHVkZS9jb25maWdzLyR7Qk9BUkR9LmgKKyNlbmRpZgorCisjaWZuZGVmIENGR19JMkNfT0ZGU0VUCisjZXJyb3IgQ0ZHX0kyQ19PRkZTRVQgaXMgbm90IGRlZmluZWQgaW4gL2luY2x1ZGUvY29uZmlncy8ke0JPQVJEfS5oCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NUEM4MzQ5QURTCisvKgorICogTVBDODM0OSBoYXZlIHR3byBpMmMgYnVzCisgKi8KK2V4dGVybiBpMmNfdCAqIG1wYzgzNDlfaTJjOworI2RlZmluZSBJMkMgbXBjODM0OV9pMmMKKyNlbHNlCisjZGVmaW5lIEkyQyAoKGkyY190KikoQ0ZHX0lNTVJCQVIgKyBDRkdfSTJDX09GRlNFVCkpCisjZW5kaWYKKworI2RlZmluZSBJMkNfUkVBRCAgMQorI2RlZmluZSBJMkNfV1JJVEUgMAorCisjZW5kaWYJLyogX0FTTV9JMkNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84M3h4LmggYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODN4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMjg0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODN4eC5oCkBAIC0wLDAgKzEsMTA2MCBAQAorLyoKKyAqIE1QQzgzNDkgSW50ZXJuYWwgTWVtb3J5IE1hcAorICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogRXJhbiBMaWJlcnR5IChsaWJlcnR5QGZyZWVzY2FsZS5jb20pCisgKgorICogYmFzZWQgb246CisgKiAtIE1QQzgyNjAgSW50ZXJuYWwgTWVtb3J5IE1hcAorICogICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKKyAqIC0gTVBDODV4eCBJbnRlcm5hbCBNZW1vcnkgTWFwCisgKiAgIENvcHlyaWdodChjKSAyMDAyLDIwMDMgTW90b3JvbGEgSW5jLgorICogICBYaWFuZ2h1YSBYaWFvICh4LnhpYW9AbW90b3JvbGEuY29tKQorICovCisjaWZuZGVmIF9fSU1NQVBfODM0OV9fCisjZGVmaW5lIF9fSU1NQVBfODM0OV9fCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaTJjLmg+CisKKy8qCisgKiBMb2NhbCBBY2Nlc3MgV2luZG93LgorICovCit0eXBlZGVmIHN0cnVjdCBsYXc4MzQ5IHsKKwl1MzIgYmFyOyAvKiBMQklVIGxvY2FsIGFjY2VzcyB3aW5kb3cgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovCisvKiBJZGVudGlmaWVzIHRoZSAyMCBtb3N0LXNpZ25pZmljYW50IGFkZHJlc3MgYml0cyBvZiB0aGUgYmFzZSBvZiBsb2NhbAorICogYWNjZXNzIHdpbmRvdyBuLiBUaGUgc3BlY2lmaWVkIGJhc2UgYWRkcmVzcyBzaG91bGQgYmUgYWxpZ25lZCB0byB0aGUKKyAqIHdpbmRvdyBzaXplLCBhcyBkZWZpbmVkIGJ5IExCTEFXQVJuW1NJWkVdLgorICovCisjZGVmaW5lIExBV0JBUl9CQVIgICAgICAgICAweEZGRkZGMDAwCisjZGVmaW5lIExBV0JBUl9SRVMJICAgICB+KExBV0JBUl9CQVIpCisJdTMyIGFyOyAvKiBMQklVIGxvY2FsIGFjY2VzcyB3aW5kb3cgYXR0cmlidXRlIHJlZ2lzdGVyICovCisvKgorICogVGhpcyBNYWNybyB3ZXJlIG1vdmVkIGludG8gbW11LmgKKyAqLworI2lmIDAKKy8qIDAgVGhlIGxvY2FsIGJ1cyBsb2NhbCBhY2Nlc3Mgd2luZG93IG4gaXMgZGlzYWJsZWQuIDEgVGhlIGxvY2FsIGJ1cworICogbG9jYWwgYWNjZXNzIHdpbmRvdyBuIGlzIGVuYWJsZWQgYW5kIG90aGVyIExCTEFXQVIwIGFuZCBMQkxBV0JBUjAgZmllbGRzCisgKiBjb21iaW5lIHRvIGlkZW50aWZ5IGFuIGFkZHJlc3MgcmFuZ2UgZm9yIHRoaXMgd2luZG93LgorICovCisjZGVmaW5lIExBV0FSX0VOICAgICAgICAgICAweDgwMDAwMDAwCisvKiBJZGVudGlmaWVzIHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgZnJvbSB0aGUgc3RhcnRpbmcgYWRkcmVzcy4gV2luZG93CisgKiBzaXplIGlzIDJeKFNJWkUrMSkgYnl0ZXMuIDAwMDAwMJYwMDEwMTBSZXNlcnZlZC4gV2luZG93IGlzCisgKiB1bmRlZmluZWQuCisgKi8KKyNkZWZpbmUgTEFXQVJfU0laRSAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUJTEFXQVJfU0laRV80SwkweDAwMDAwMDBCCisjZGVmaW5lCUxBV0FSX1NJWkVfOEsJMHgwMDAwMDAwQworI2RlZmluZQlMQVdBUl9TSVpFXzE2SwkweDAwMDAwMDBECisjZGVmaW5lCUxBV0FSX1NJWkVfMzJLCTB4MDAwMDAwMEUKKyNkZWZpbmUJTEFXQVJfU0laRV82NEsJMHgwMDAwMDAwRgorI2RlZmluZQlMQVdBUl9TSVpFXzEyOEsJMHgwMDAwMDAxMAorI2RlZmluZQlMQVdBUl9TSVpFXzI1NksJMHgwMDAwMDAxMQorI2RlZmluZQlMQVdBUl9TSVpFXzUxMksJMHgwMDAwMDAxMgorI2RlZmluZQlMQVdBUl9TSVpFXzFNCTB4MDAwMDAwMTMKKyNkZWZpbmUJTEFXQVJfU0laRV8yTQkweDAwMDAwMDE0CisjZGVmaW5lCUxBV0FSX1NJWkVfNE0JMHgwMDAwMDAxNQorI2RlZmluZQlMQVdBUl9TSVpFXzhNCTB4MDAwMDAwMTYKKyNkZWZpbmUJTEFXQVJfU0laRV8xNk0JMHgwMDAwMDAxNworI2RlZmluZQlMQVdBUl9TSVpFXzMyTQkweDAwMDAwMDE4CisjZGVmaW5lCUxBV0FSX1NJWkVfNjRNCTB4MDAwMDAwMTkKKyNkZWZpbmUJTEFXQVJfU0laRV8xMjhNCTB4MDAwMDAwMUEKKyNkZWZpbmUJTEFXQVJfU0laRV8yNTZNCTB4MDAwMDAwMUIKKyNkZWZpbmUJTEFXQVJfU0laRV81MTJNCTB4MDAwMDAwMUMKKyNkZWZpbmUJTEFXQVJfU0laRV8xRwkweDAwMDAwMDFECisjZGVmaW5lCUxBV0FSX1NJWkVfMkcJMHgwMDAwMDAxRQorI2RlZmluZSBMQVdBUl9SRVMgICAgICAgICAgfihMQVdBUl9FTnxMQVdBUl9TSVpFKQorI2VuZGlmCisKK30gbGF3ODM0OV90OworCisvKgorICogU3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBzeXNjb25mODM0OSB7CisJdTMyIGltbXJiYXI7IC8qIEludGVybmFsIG1lbW9yeSBtYXAgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovCisJdTggcmVzMFsweDA0XTsKKwl1MzIgYWx0Y2JhcjsgLyogQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovCisvKiBJZGVudGlmaWVzIHRoZTEyIG1vc3Qgc2lnbmlmaWNhbnQgYWRkcmVzcyBiaXRzIG9mIGFuIGFsdGVybmF0ZSBiYXNlCisgKiBhZGRyZXNzIHVzZWQgZm9yIGJvb3Qgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMuCisgKi8KKyNkZWZpbmUgQUxUQ0JBUl9CQVNFX0FERFIgICAgIDB4RkZGMDAwMDAKKyNkZWZpbmUgQUxUQ0JBUl9SRVMgICAgICAgICAgIH4oQUxUQ0JBUl9CQVNFX0FERFIpIC8qIFJlc2VydmVkLiBXcml0ZSBoYXMgbm8gZWZmZWN0LCByZWFkIHJldHVybnMgMC4gKi8KKwl1OCByZXMxWzB4MTRdOworCWxhdzgzNDlfdCBsYmxhd1s0XTsgLyogTEJJVSBsb2NhbCBhY2Nlc3Mgd2luZG93ICovCisJdTggcmVzMlsweDIwXTsKKwlsYXc4MzQ5X3QgcGNpbGF3WzJdOyAvKiBQQ0kgbG9jYWwgYWNjZXNzIHdpbmRvdyAqLworCXU4IHJlczNbMHgzMF07CisJbGF3ODM0OV90IGRkcmxhd1syXTsgLyogRERSIGxvY2FsIGFjY2VzcyB3aW5kb3cgKi8KKwl1OCByZXM0WzB4NTBdOworCXUzMiBzZ3BybDsgLyogU3lzdGVtIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlciBMb3cgKi8KKwl1MzIgc2dwcmg7IC8qIFN5c3RlbSBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXIgSGlnaCAqLworCXUzMiBzcHJpZHI7IC8qIFN5c3RlbSBQYXJ0IGFuZCBSZXZpc2lvbiBJRCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJJRFJfUEFSVElEICAgICAgICAgMHhGRkZGMDAwMCAvKiBQYXJ0IElkZW50aWZpY2F0aW9uLiAqLworI2RlZmluZSBTUFJJRFJfUkVWSUQgICAgICAgICAgMHgwMDAwRkZGRiAvKiBSZXZpc2lvbiBJZGVudGlmaWNhdGlvbi4gKi8KKwl1OCByZXM1WzB4MDRdOworCXUzMiBzcGNyOyAvKiBTeXN0ZW0gUHJpb3JpdHkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTUENSX1BDSUhQRSAgIDB4MTAwMDAwMDAgLyogUENJIEhpZ2hlc3QgUHJpb3JpdHkgRW5hYmxlLiAqLworI2RlZmluZSBTUENSX1BDSVBSICAgIDB4MDMwMDAwMDAgLyogUENJIGJyaWRnZSBzeXN0ZW0gYnVzIHJlcXVlc3QgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfVEJFTiAgICAgMHgwMDQwMDAwMCAvKiBFMzAwIFBvd2VyUEMgY29yZSB0aW1lIGJhc2UgdW5pdCBlbmFibGUuICovCisjZGVmaW5lIFNQQ1JfQ09SRVBSICAgMHgwMDMwMDAwMCAvKiBFMzAwIFBvd2VyUEMgQ29yZSBzeXN0ZW0gYnVzIHJlcXVlc3QgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfVFNFQzFEUCAgMHgwMDAwMzAwMCAvKiBUU0VDMSBkYXRhIHByaW9yaXR5LiAqLworI2RlZmluZSBTUENSX1RTRUMxQkRQIDB4MDAwMDBDMDAgLyogVFNFQzEgYnVmZmVyIGRlc2NyaXB0b3IgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfVFNFQzFFUCAgMHgwMDAwMDMwMCAvKiBUU0VDMSBlbWVyZ2VuY3kgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfVFNFQzJEUCAgMHgwMDAwMDAzMCAvKiBUU0VDMiBkYXRhIHByaW9yaXR5LiAqLworI2RlZmluZSBTUENSX1RTRUMyQkRQIDB4MDAwMDAwMEMgLyogVFNFQzIgYnVmZmVyIGRlc2NyaXB0b3IgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfVFNFQzJFUCAgMHgwMDAwMDAwMyAvKiBUU0VDMiBlbWVyZ2VuY3kgcHJpb3JpdHkuICovCisjZGVmaW5lIFNQQ1JfUkVTICAgICAgfihTUENSX1BDSUhQRSB8IFNQQ1JfUENJUFIgfCBTUENSX1RCRU4gfCBTUENSX0NPUkVQUiBcCisJCQl8IFNQQ1JfVFNFQzFEUCB8IFNQQ1JfVFNFQzFCRFAgfCBTUENSX1RTRUMxRVAgXAorCQkJfCBTUENSX1RTRUMyRFAgfCBTUENSX1RTRUMyQkRQIHwgU1BDUl9UU0VDMkVQKQorCXUzMiBzaWNybDsgLyogU3lzdGVtIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlciBMb3cgKi8KKyNkZWZpbmUgU0lDUkxfTERQX0EgICAweDgwMDAwMDAwCisjZGVmaW5lIFNJQ1JMX1VTQjAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTSUNSTF9VU0IxICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgU0lDUkxfVUFSVCAgICAweDBDMDAwMDAwCisjZGVmaW5lIFNJQ1JMX0dQSU8xX0EgMHgwMjAwMDAwMAorI2RlZmluZSBTSUNSTF9HUElPMV9CIDB4MDEwMDAwMDAKKyNkZWZpbmUgU0lDUkxfR1BJTzFfQyAweDAwODAwMDAwCisjZGVmaW5lIFNJQ1JMX0dQSU8xX0QgMHgwMDQwMDAwMAorI2RlZmluZSBTSUNSTF9HUElPMV9FIDB4MDAyMDAwMDAKKyNkZWZpbmUgU0lDUkxfR1BJTzFfRiAweDAwMTgwMDAwCisjZGVmaW5lIFNJQ1JMX0dQSU8xX0cgMHgwMDA0MDAwMAorI2RlZmluZSBTSUNSTF9HUElPMV9IIDB4MDAwMjAwMDAKKyNkZWZpbmUgU0lDUkxfR1BJTzFfSSAweDAwMDEwMDAwCisjZGVmaW5lIFNJQ1JMX0dQSU8xX0ogMHgwMDAwODAwMAorI2RlZmluZSBTSUNSTF9HUElPMV9LIDB4MDAwMDQwMDAKKyNkZWZpbmUgU0lDUkxfR1BJTzFfTCAweDAwMDAzMDAwCisjZGVmaW5lIFNJQ1JMX1JFUyB+KFNJQ1JMX0xEUF9BIHwgU0lDUkxfVVNCMCB8IFNJQ1JMX1VTQjEgfCBTSUNSTF9VQVJUIFwKKwkJCXwgU0lDUkxfR1BJTzFfQSB8IFNJQ1JMX0dQSU8xX0IgfCBTSUNSTF9HUElPMV9DIFwKKwkJCXwgU0lDUkxfR1BJTzFfRCB8IFNJQ1JMX0dQSU8xX0UgfCBTSUNSTF9HUElPMV9GIFwKKwkJCXwgU0lDUkxfR1BJTzFfRyB8IFNJQ1JMX0dQSU8xX0ggfCBTSUNSTF9HUElPMV9JIFwKKwkJCXwgU0lDUkxfR1BJTzFfSiB8IFNJQ1JMX0dQSU8xX0sgfCBTSUNSTF9HUElPMV9MICkKKwl1MzIgc2ljcmg7IC8qIFN5c3RlbSBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXIgSGlnaCAqLworI2RlZmluZSBTSUNSSF9ERFIgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0lDUkhfVFNFQzFfQSAweDEwMDAwMDAwCisjZGVmaW5lIFNJQ1JIX1RTRUMxX0IgMHgwODAwMDAwMAorI2RlZmluZSBTSUNSSF9UU0VDMV9DIDB4MDQwMDAwMDAKKyNkZWZpbmUgU0lDUkhfVFNFQzFfRCAweDAyMDAwMDAwCisjZGVmaW5lIFNJQ1JIX1RTRUMxX0UgMHgwMTAwMDAwMAorI2RlZmluZSBTSUNSSF9UU0VDMV9GIDB4MDA4MDAwMDAKKyNkZWZpbmUgU0lDUkhfVFNFQzJfQSAweDAwNDAwMDAwCisjZGVmaW5lIFNJQ1JIX1RTRUMyX0IgMHgwMDIwMDAwMAorI2RlZmluZSBTSUNSSF9UU0VDMl9DIDB4MDAxMDAwMDAKKyNkZWZpbmUgU0lDUkhfVFNFQzJfRCAweDAwMDgwMDAwCisjZGVmaW5lIFNJQ1JIX1RTRUMyX0UgMHgwMDA0MDAwMAorI2RlZmluZSBTSUNSSF9UU0VDMl9GIDB4MDAwMjAwMDAKKyNkZWZpbmUgU0lDUkhfVFNFQzJfRyAweDAwMDEwMDAwCisjZGVmaW5lIFNJQ1JIX1RTRUMyX0ggMHgwMDAwODAwMAorI2RlZmluZSBTSUNSSF9HUElPMl9BIDB4MDAwMDQwMDAKKyNkZWZpbmUgU0lDUkhfR1BJTzJfQiAweDAwMDAyMDAwCisjZGVmaW5lIFNJQ1JIX0dQSU8yX0MgMHgwMDAwMTAwMAorI2RlZmluZSBTSUNSSF9HUElPMl9EIDB4MDAwMDA4MDAKKyNkZWZpbmUgU0lDUkhfR1BJTzJfRSAweDAwMDAwNDAwCisjZGVmaW5lIFNJQ1JIX0dQSU8yX0YgMHgwMDAwMDIwMAorI2RlZmluZSBTSUNSSF9HUElPMl9HIDB4MDAwMDAxODAKKyNkZWZpbmUgU0lDUkhfR1BJTzJfSCAweDAwMDAwMDYwCisjZGVmaW5lIFNJQ1JIX1RTT0JJMSAgMHgwMDAwMDAwMgorI2RlZmluZSBTSUNSSF9UU09CSTIgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0lDUmhfUkVTICAgICB+KCAgU0lDUkhfRERSIHwgU0lDUkhfVFNFQzFfQSB8IFNJQ1JIX1RTRUMxX0IgXAorCQkJfCBTSUNSSF9UU0VDMV9DIHwgU0lDUkhfVFNFQzFfRCB8IFNJQ1JIX1RTRUMxX0UgXAorCQkJfCBTSUNSSF9UU0VDMV9GIHwgU0lDUkhfVFNFQzJfQSB8IFNJQ1JIX1RTRUMyX0IgXAorCQkJfCBTSUNSSF9UU0VDMl9DIHwgU0lDUkhfVFNFQzJfRCB8IFNJQ1JIX1RTRUMyX0UgXAorCQkJfCBTSUNSSF9UU0VDMl9GIHwgU0lDUkhfVFNFQzJfRyB8IFNJQ1JIX1RTRUMyX0ggXAorCQkJfCBTSUNSSF9HUElPMl9BIHwgU0lDUkhfR1BJTzJfQiB8IFNJQ1JIX0dQSU8yX0MgXAorCQkJfCBTSUNSSF9HUElPMl9EIHwgU0lDUkhfR1BJTzJfRSB8IFNJQ1JIX0dQSU8yX0YgXAorCQkJfCBTSUNSSF9HUElPMl9HIHwgU0lDUkhfR1BJTzJfSCB8IFNJQ1JIX1RTT0JJMSBcCisJCQl8IFNJQ1JIX1RTT0JJMikKKwl1OCByZXM2WzB4RTRdOworfSBzeXNjb25mODM0OV90OworCisvKgorICogV2F0Y2ggRG9nIFRpbWVyIChXRFQpIFJlZ2lzdGVycworICovCit0eXBlZGVmIHN0cnVjdCB3ZHQ4MzQ5IHsKKwl1OCByZXMwWzRdOworCXUzMiBzd2NycjsgLyogU3lzdGVtIHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1MzIgc3djbnI7IC8qIFN5c3RlbSB3YXRjaGRvZyBjb3VudCByZWdpc3RlciAqLworI2RlZmluZSBTV0NOUl9TV0NOIDB4MDAwMEZGRkYgU29mdHdhcmUgV2F0Y2hkb2cgQ291bnQgRmllbGQuCisjZGVmaW5lIFNXQ05SX1JFUyAgfihTV0NOUl9TV0NOKQorCXU4IHJlczFbMl07CisJdTE2IHN3c3JyOyAvKiBTeXN0ZW0gd2F0Y2hkb2cgc2VydmljZSByZWdpc3RlciAqLworCXU4IHJlczJbMHhGMF07Cit9IHdkdDgzNDlfdDsKKworLyoKKyAqIFJUQy9QSVQgTW9kdWxlIFJlZ2lzdGVycworICovCit0eXBlZGVmIHN0cnVjdCBydGNsazgzNDkgeworCXUzMiBjbnI7IC8qIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ05SX0NMRU4gMHgwMDAwMDA4MCAvKiBDbG9jayBFbmFibGUgQ29udHJvbCBCaXQgICovCisjZGVmaW5lIENOUl9DTElOIDB4MDAwMDAwNDAgLyogSW5wdXQgQ2xvY2sgQ29udHJvbCBCaXQgICovCisjZGVmaW5lIENOUl9BSU0gIDB4MDAwMDAwMDIgLyogQWxhcm0gSW50ZXJydXB0IE1hc2sgQml0ICAqLworI2RlZmluZSBDTlJfU0lNICAweDAwMDAwMDAxIC8qIFNlY29uZCBJbnRlcnJ1cHQgTWFzayBCaXQgICovCisjZGVmaW5lIENOUl9SRVMgIH4oQ05SX0NMRU4gfCBDTlJfQ0xJTiB8IENOUl9BSU0gfCBDTlJfU0lNKQorCXUzMiBsZHI7IC8qIGxvYWQgcmVnaXN0ZXIgKi8KKwl1MzIgcHNyOyAvKiBwcmVzY2FsZSByZWdpc3RlciAqLworCXUzMiBjdHI7IC8qIHJlZ2lzdGVyICovCisJdTMyIGV2cjsgLyogZXZlbnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRFVlJfU0lGICAweDAwMDAwMDAxIC8qIFNlY29uZCBJbnRlcnJ1cHQgRmxhZyBCaXQgICovCisjZGVmaW5lIFJURVZSX0FJRiAgMHgwMDAwMDAwMiAvKiBBbGFybSBJbnRlcnJ1cHQgRmxhZyBCaXQgICovCisjZGVmaW5lIFJURVZSX1JFUyAgfihFVlJfU0lGIHwgRVZSX0FJRikKKwl1MzIgYWxyOyAvKiBhbGFybSByZWdpc3RlciAqLworCXU4IHJlczBbMHhFOF07Cit9IHJ0Y2xrODM0OV90OworCisvKgorICogR2xvYmFsIHRpbXBlciBtb2R1bGUKKyAqLworCit0eXBlZGVmIHN0cnVjdCBndG04MzQ5IHsKKwl1OCAgICBjZnIxOyAvKiBUaW1lcjEvMiBDb25maWd1cmF0aW9uICAqLworI2RlZmluZSBDRlIxX1BDQVMgMHg4MCAvKiBQYWlyIENhc2NhZGUgbW9kZSAgKi8KKyNkZWZpbmUgQ0ZSMV9CQ00gIDB4NDAgIC8qIEJhY2t3YXJkIGNvbXBhdGlibGUgbW9kZSAgKi8KKyNkZWZpbmUgQ0ZSMV9TVFAyIDB4MjAgLyogU3RvcCB0aW1lciAgKi8KKyNkZWZpbmUgQ0ZSMV9SU1QyIDB4MTAgLyogUmVzZXQgdGltZXIgICovCisjZGVmaW5lIENGUjFfR00yICAweDA4IC8qIEdhdGUgbW9kZSBmb3IgcGluIDIgICovCisjZGVmaW5lIENGUjFfR00xICAweDA0IC8qIEdhdGUgbW9kZSBmb3IgcGluIDEgICovCisjZGVmaW5lIENGUjFfU1RQMSAweDAyIC8qIFN0b3AgdGltZXIgICovCisjZGVmaW5lIENGUjFfUlNUMSAweDAxIC8qIFJlc2V0IHRpbWVyICAqLworCXU4ICAgIHJlczBbM107CisJdTggICAgY2ZyMjsgLyogVGltZXIzLzQgQ29uZmlndXJhdGlvbiAgKi8KKyNkZWZpbmUgQ0ZSMl9QQ0FTIDB4ODAgLyogUGFpciBDYXNjYWRlIG1vZGUgICovCisjZGVmaW5lIENGUjJfU0NBUyAweDQwIC8qIFN1cGVyIENhc2NhZGUgbW9kZSAgKi8KKyNkZWZpbmUgQ0ZSMl9TVFA0IDB4MjAgLyogU3RvcCB0aW1lciAgKi8KKyNkZWZpbmUgQ0ZSMl9SU1Q0IDB4MTAgLyogUmVzZXQgdGltZXIgICovCisjZGVmaW5lIENGUjJfR000ICAweDA4IC8qIEdhdGUgbW9kZSBmb3IgcGluIDQgICovCisjZGVmaW5lIENGUjJfR00zICAweDA0IC8qIEdhdGUgbW9kZSBmb3IgcGluIDMgICovCisjZGVmaW5lIENGUjJfU1RQMyAweDAyIC8qIFN0b3AgdGltZXIgICovCisjZGVmaW5lIENGUjJfUlNUMyAweDAxIC8qIFJlc2V0IHRpbWVyICAqLworCXU4ICAgIHJlczFbMTBdOworCXUxNiAgIG1kcjE7IC8qIFRpbWVyMSBNb2RlIFJlZ2lzdGVyICAqLworI2RlZmluZSBNRFJfU1BTICAweGZmMDAgLyogU2Vjb25kYXJ5IFByZXNjYWxlciB2YWx1ZSAgKi8KKyNkZWZpbmUgTURSX0NFICAgMHgwMGMwIC8qIENhcHR1cmUgZWRnZSBhbmQgZW5hYmxlIGludGVycnVwdCAgKi8KKyNkZWZpbmUgTURSX09NICAgMHgwMDIwIC8qIE91dHB1dCBtb2RlICAqLworI2RlZmluZSBNRFJfT1JJICAweDAwMTAgLyogT3V0cHV0IHJlZmVyZW5jZSBpbnRlcnJ1cHQgZW5hYmxlICAqLworI2RlZmluZSBNRFJfRlJSICAweDAwMDggLyogRnJlZSBydW4vcmVzdGFydCAgKi8KKyNkZWZpbmUgTURSX0lDTEsgMHgwMDA2IC8qIElucHV0IGNsb2NrIHNvdXJjZSBmb3IgdGhlIHRpbWVyICAqLworI2RlZmluZSBNRFJfR0UgICAweDAwMDEgLyogR2F0ZSBlbmFibGUgICovCisJdTE2ICAgbWRyMjsgLyogVGltZXIyIE1vZGUgUmVnaXN0ZXIgICovCisJdTE2ICAgcmZyMTsgLyogVGltZXIxIFJlZmVyZW5jZSBSZWdpc3RlciAgKi8KKwl1MTYgICByZnIyOyAvKiBUaW1lcjIgUmVmZXJlbmNlIFJlZ2lzdGVyICAqLworCXUxNiAgIGNwcjE7IC8qIFRpbWVyMSBDYXB0dXJlIFJlZ2lzdGVyICAqLworCXUxNiAgIGNwcjI7IC8qIFRpbWVyMiBDYXB0dXJlIFJlZ2lzdGVyICAqLworCXUxNiAgIGNucjE7IC8qIFRpbWVyMSBDb3VudGVyIFJlZ2lzdGVyICAqLworCXUxNiAgIGNucjI7IC8qIFRpbWVyMiBDb3VudGVyIFJlZ2lzdGVyICAqLworCXUxNiAgIG1kcjM7IC8qIFRpbWVyMyBNb2RlIFJlZ2lzdGVyICAqLworCXUxNiAgIG1kcjQ7IC8qIFRpbWVyNCBNb2RlIFJlZ2lzdGVyICAqLworCXUxNiAgIHJmcjM7IC8qIFRpbWVyMyBSZWZlcmVuY2UgUmVnaXN0ZXIgICovCisJdTE2ICAgcmZyNDsgLyogVGltZXI0IFJlZmVyZW5jZSBSZWdpc3RlciAgKi8KKwl1MTYgICBjcHIzOyAvKiBUaW1lcjMgQ2FwdHVyZSBSZWdpc3RlciAgKi8KKwl1MTYgICBjcHI0OyAvKiBUaW1lcjQgQ2FwdHVyZSBSZWdpc3RlciAgKi8KKwl1MTYgICBjbnIzOyAvKiBUaW1lcjMgQ291bnRlciBSZWdpc3RlciAgKi8KKwl1MTYgICBjbnI0OyAvKiBUaW1lcjQgQ291bnRlciBSZWdpc3RlciAgKi8KKwl1MTYgICBldnIxOyAvKiBUaW1lcjEgRXZlbnQgUmVnaXN0ZXIgICovCisJdTE2ICAgZXZyMjsgLyogVGltZXIyIEV2ZW50IFJlZ2lzdGVyICAqLworCXUxNiAgIGV2cjM7IC8qIFRpbWVyMyBFdmVudCBSZWdpc3RlciAgKi8KKwl1MTYgICBldnI0OyAvKiBUaW1lcjQgRXZlbnQgUmVnaXN0ZXIgICovCisjZGVmaW5lIEdURVZSX1JFRiAweDAwMDIgLyogT3V0cHV0IHJlZmVyZW5jZSBldmVudCAgKi8KKyNkZWZpbmUgR1RFVlJfQ0FQIDB4MDAwMSAvKiBDb3VudGVyIENhcHR1cmUgZXZlbnQgICAqLworI2RlZmluZSBHVEVWUl9SRVMgfihFVlJfQ0FQfEVWUl9SRUYpCisJdTE2ICAgcHNyMTsgLyogVGltZXIxIFByZXNjYWxlciBSZWdpc3RlciAgKi8KKwl1MTYgICBwc3IyOyAvKiBUaW1lcjIgUHJlc2NhbGVyIFJlZ2lzdGVyICAqLworCXUxNiAgIHBzcjM7IC8qIFRpbWVyMyBQcmVzY2FsZXIgUmVnaXN0ZXIgICovCisJdTE2ICAgcHNyNDsgLyogVGltZXI0IFByZXNjYWxlciBSZWdpc3RlciAgKi8KKwl1OCAgICByZXNbMHhDMF07Cit9IGd0bTgzNDlfdDsKKworLyoKKyAqIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyCisgKi8KK3R5cGVkZWYgc3RydWN0IGlwaWM4MzQ5IHsKKwl1MzIgICAgc2ljZnI7IC8qICBTeXN0ZW0gR2xvYmFsIEludGVycnVwdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChTSUNGUikgICovCisjZGVmaW5lIFNJQ0ZSX0hQSSAgMHg3ZjAwMDAwMCAvKiAgSGlnaGVzdCBQcmlvcml0eSBJbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJQ0ZSX01QU0IgMHgwMDQwMDAwMCAvKiAgTWl4ZWQgaW50ZXJydXB0cyBQcmlvcml0eSBTY2hlbWUgZm9yIGdyb3VwIEIgICovCisjZGVmaW5lIFNJQ0ZSX01QU0EgMHgwMDIwMDAwMCAvKiAgTWl4ZWQgaW50ZXJydXB0cyBQcmlvcml0eSBTY2hlbWUgZm9yIGdyb3VwIEEgICovCisjZGVmaW5lIFNJQ0ZSX0lQU0QgMHgwMDA4MDAwMCAvKiAgSW50ZXJuYWwgaW50ZXJydXB0cyBQcmlvcml0eSBTY2hlbWUgZm9yIGdyb3VwIEQgICovCisjZGVmaW5lIFNJQ0ZSX0lQU0EgMHgwMDAxMDAwMCAvKiAgSW50ZXJuYWwgaW50ZXJydXB0cyBQcmlvcml0eSBTY2hlbWUgZm9yIGdyb3VwIEEgICovCisjZGVmaW5lIFNJQ0ZSX0hQSVQgMHgwMDAwMDMwMCAvKiAgSFBJIHByaW9yaXR5IHBvc2l0aW9uIElQSUMgb3V0cHV0IGludGVycnVwdCBUeXBlICAqLworI2RlZmluZSBTSUNGUl9SRVMgfihTSUNGUl9IUEl8U0lDRlJfTVBTQnxTSUNGUl9NUFNBfFNJQ0ZSX0lQU0R8U0lDRlJfSVBTQXxTSUNGUl9IUElUKQorCXUzMiAgICBzaXZjcjsgLyogIFN5c3RlbSBHbG9iYWwgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAoU0lWQ1IpICAqLworI2RlZmluZSBTSUNWUl9JVkVDWCAweGZjMDAwMDAwIC8qICBJbnRlcnJ1cHQgdmVjdG9yIChmb3IgQ0UgY29tcGF0aWJpbGl0eSBwdXJwb3NlIG9ubHkgbm90IHVzZWQgaW4gODM0OSBJUElDIGltcGxlbWVudGF0aW9uKSAgKi8KKyNkZWZpbmUgU0lDVlJfSVZFQyAgMHgwMDAwMDA3ZiAvKiAgSW50ZXJydXB0IHZlY3RvciAgKi8KKyNkZWZpbmUgU0lDVlJfUkVTIH4oU0lDVlJfSVZFQ1h8U0lDVlJfSVZFQykKKwl1MzIgICAgc2lwbnJfaDsgLyogIFN5c3RlbSBJbnRlcm5hbCBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAtIEhpZ2ggKFNJUE5SX0gpICAqLworI2RlZmluZSBTSUlIX1RTRUMxVFggMHg4MDAwMDAwMCAvKiAgVFNFQzEgVHggaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1RTRUMxUlggMHg0MDAwMDAwMCAvKiAgVFNFQzEgUnggaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1RTRUMxRVIgMHgyMDAwMDAwMCAvKiAgVFNFQzEgRXJvciBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUhfVFNFQzJUWCAweDEwMDAwMDAwIC8qICBUU0VDMiBUeCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUhfVFNFQzJSWCAweDA4MDAwMDAwIC8qICBUU0VDMiBSeCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUhfVFNFQzJFUiAweDA0MDAwMDAwIC8qICBUU0VDMiBFcm9yIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJSF9VU0IyRFIgIDB4MDIwMDAwMDAgLyogIFVTQjIgRFIgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1VTQjJNUEggMHgwMTAwMDAwMCAvKiAgVVNCMiBNUEggaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1VBUlQxICAgMHgwMDAwMDA4MCAvKiAgVUFSVDEgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1VBUlQyICAgMHgwMDAwMDA0MCAvKiAgVUFSVDIgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1NFQyAgICAgMHgwMDAwMDAyMCAvKiAgU0VDIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJSF9JMkMxICAgIDB4MDAwMDAwMDQgLyogIEkyQzEgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX0kyQzIgICAgMHgwMDAwMDAwMiAvKiAgSTJDMSBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUhfU1BJICAgICAweDAwMDAwMDAxIC8qICBTUEkgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlIX1JFUwl+KFNJSUhfVFNFQzFUWCB8IFNJSUhfVFNFQzFSWCB8IFNJSUhfVFNFQzFFUiBcCisJCQl8IFNJSUhfVFNFQzJUWCB8IFNJSUhfVFNFQzJSWCB8IFNJSUhfVFNFQzJFUiBcCisJCQl8IFNJSUhfVVNCMkRSIHwgU0lJSF9VU0IyTVBIIHwgU0lJSF9VQVJUMSBcCisJCQl8IFNJSUhfVUFSVDIgfCBTSUlIX1NFQyB8IFNJSUhfSTJDMSBcCisJCQl8IFNJSUhfSTJDMiB8IFNJSUhfU1BJKQorCXUzMiAgICBzaXBucl9sOyAvKiAgU3lzdGVtIEludGVybmFsIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIC0gTG93IChTSVBOUl9MKSAgKi8KKyNkZWZpbmUgU0lJTF9SVENTICAweDgwMDAwMDAwIC8qICBSVEMgU0VDT05EIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9QSVQgICAweDQwMDAwMDAwIC8qICBQSVQgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX1BDSTEgIDB4MjAwMDAwMDAgLyogIFBDSTEgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX1BDSTIgIDB4MTAwMDAwMDAgLyogIFBDSTIgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX1JUQ0EgIDB4MDgwMDAwMDAgLyogIFJUQyBBTEFSTSBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfTVUgICAgMHgwNDAwMDAwMCAvKiAgTWVzc2FnZSBVbml0IGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9TQkEgICAweDAyMDAwMDAwIC8qICBTeXN0ZW0gQnVzIEFyYml0ZXIgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX0RNQSAgIDB4MDEwMDAwMDAgLyogIERNQSBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfR1RNNCAgMHgwMDgwMDAwMCAvKiAgR1RNNCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfR1RNOCAgMHgwMDQwMDAwMCAvKiAgR1RNOCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfR1BJTzEgMHgwMDIwMDAwMCAvKiAgR1BJTzEgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX0dQSU8yIDB4MDAxMDAwMDAgLyogIEdQSU8yIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9ERFIgICAweDAwMDgwMDAwIC8qICBERFIgaW50ZXJydXB0ICAqLworI2RlZmluZSBTSUlMX0xCQyAgIDB4MDAwNDAwMDAgLyogIExCQyBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfR1RNMiAgMHgwMDAyMDAwMCAvKiAgR1RNMiBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfR1RNNiAgMHgwMDAxMDAwMCAvKiAgR1RNNiBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNJSUxfUE1DICAgMHgwMDAwODAwMCAvKiAgUE1DIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9HVE0zICAweDAwMDAwODAwIC8qICBHVE0zIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9HVE03ICAweDAwMDAwNDAwIC8qICBHVE03IGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9HVE0xICAweDAwMDAwMDIwIC8qICBHVE0xIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9HVE01ICAweDAwMDAwMDEwIC8qICBHVE01IGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0lJTF9EUFRDICAweDAwMDAwMDAxIC8qICBEUFRDIGludGVycnVwdCAoISEhIEludmlzaWJsZSBmb3IgdXNlciAhISEpICAqLworI2RlZmluZSBTSUlMX1JFUwl+KFNJSUxfUlRDUyB8IFNJSUxfUElUIHwgU0lJTF9QQ0kxIHwgU0lJTF9QQ0kyIFwKKwkJCXwgU0lJTF9SVENBIHwgU0lJTF9NVSB8IFNJSUxfU0JBIHwgU0lJTF9ETUEgXAorCQkJfCBTSUlMX0dUTTQgfCBTSUlMX0dUTTggfCBTSUlMX0dQSU8xIHwgU0lJTF9HUElPMiBcCisJCQl8IFNJSUxfRERSIHwgU0lJTF9MQkMgfCBTSUlMX0dUTTIgfCBTSUlMX0dUTTYgXAorCQkJfCBTSUlMX1BNQyB8U0lJTF9HVE0zIHwgU0lJTF9HVE03IHwgU0lJTF9HVE0xIFwKKwkJCXwgU0lJTF9HVE01IHxTSUlMX0RQVEMgKQorCXUzMiAgICBzaXBycl9hOyAvKiAgU3lzdGVtIEludGVybmFsIEludGVycnVwdCBHcm91cCBBIFByaW9yaXR5IFJlZ2lzdGVyIChQUlIpICAqLworCXU4ICAgICByZXMwWzhdOworCXUzMiAgICBzaXBycl9kOyAvKiAgU3lzdGVtIEludGVybmFsIEludGVycnVwdCBHcm91cCBEIFByaW9yaXR5IFJlZ2lzdGVyIChQUlIpICAqLworCXUzMiAgICBzaW1zcl9oOyAvKiAgU3lzdGVtIEludGVybmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0gSGlnaCAoU0lJSCkgICovCisJdTMyICAgIHNpbXNyX2w7IC8qICBTeXN0ZW0gSW50ZXJuYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLSBMb3cgKFNJSUwpICAqLworCXU4ICAgICByZXMxWzRdOworCXUzMiAgICBzZXBucjsgICAvKiAgU3lzdGVtIEV4dGVybmFsIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIChTRUkpICAqLworCXUzMiAgICBzbXBycl9hOyAvKiAgU3lzdGVtIE1peGVkIEludGVycnVwdCBHcm91cCBBIFByaW9yaXR5IFJlZ2lzdGVyIChQUlIpICAqLworCXUzMiAgICBzbXBycl9iOyAvKiAgU3lzdGVtIE1peGVkIEludGVycnVwdCBHcm91cCBCIFByaW9yaXR5IFJlZ2lzdGVyIChQUlIpICAqLworI2RlZmluZSBQUlJfMCAweGUwMDAwMDAwIC8qIFByaW9yaXR5IFJlZ2lzdGVyLCBQb3NpdGlvbiAwIHByb2dyYW1taW5nICovCisjZGVmaW5lIFBSUl8xIDB4MWMwMDAwMDAgLyogUHJpb3JpdHkgUmVnaXN0ZXIsIFBvc2l0aW9uIDEgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgUFJSXzIgMHgwMzgwMDAwMCAvKiBQcmlvcml0eSBSZWdpc3RlciwgUG9zaXRpb24gMiBwcm9ncmFtbWluZyAqLworI2RlZmluZSBQUlJfMyAweDAwNzAwMDAwIC8qIFByaW9yaXR5IFJlZ2lzdGVyLCBQb3NpdGlvbiAzIHByb2dyYW1taW5nICovCisjZGVmaW5lIFBSUl80IDB4MDAwMGUwMDAgLyogUHJpb3JpdHkgUmVnaXN0ZXIsIFBvc2l0aW9uIDQgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgUFJSXzUgMHgwMDAwMWMwMCAvKiBQcmlvcml0eSBSZWdpc3RlciwgUG9zaXRpb24gNSBwcm9ncmFtbWluZyAqLworI2RlZmluZSBQUlJfNiAweDAwMDAwMzgwIC8qIFByaW9yaXR5IFJlZ2lzdGVyLCBQb3NpdGlvbiA2IHByb2dyYW1taW5nICovCisjZGVmaW5lIFBSUl83IDB4MDAwMDAwNzAgLyogUHJpb3JpdHkgUmVnaXN0ZXIsIFBvc2l0aW9uIDcgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgUFJSX1JFUyB+KFBSUl8wfFBSUl8xfFBSUl8yfFBSUl8zfFBSUl80fFBSUl81fFBSUl82fFBSUl83KQorCXUzMiAgICBzZW1zcjsgLyogIFN5c3RlbSBFeHRlcm5hbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAoU0VJKSAgKi8KKyNkZWZpbmUgU0VJX0lSUTAgIDB4ODAwMDAwMDAgLyogIElSUTAgZXh0ZXJuYWwgaW50ZXJydXB0ICAqLworI2RlZmluZSBTRUlfSVJRMSAgMHg0MDAwMDAwMCAvKiAgSVJRMSBleHRlcm5hbCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNFSV9JUlEyICAweDIwMDAwMDAwIC8qICBJUlEyIGV4dGVybmFsIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0VJX0lSUTMgIDB4MTAwMDAwMDAgLyogIElSUTMgZXh0ZXJuYWwgaW50ZXJydXB0ICAqLworI2RlZmluZSBTRUlfSVJRNCAgMHgwODAwMDAwMCAvKiAgSVJRNCBleHRlcm5hbCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNFSV9JUlE1ICAweDA0MDAwMDAwIC8qICBJUlE1IGV4dGVybmFsIGludGVycnVwdCAgKi8KKyNkZWZpbmUgU0VJX0lSUTYgIDB4MDIwMDAwMDAgLyogIElSUTYgZXh0ZXJuYWwgaW50ZXJydXB0ICAqLworI2RlZmluZSBTRUlfSVJRNyAgMHgwMTAwMDAwMCAvKiAgSVJRNyBleHRlcm5hbCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNFSV9TSVJRMCAweDAwMDA4MDAwIC8qICBTSVJRMCBleHRlcm5hbCBpbnRlcnJ1cHQgICovCisjZGVmaW5lIFNFSV9SRVMJCX4oIFNFSV9JUlEwIHwgU0VJX0lSUTEgfCBTRUlfSVJRMiB8IFNFSV9JUlEzIFwKKwkJCXwgU0VJX0lSUTQgfCBTRUlfSVJRNSB8IFNFSV9JUlE2IHwgU0VJX0lSUTcgXAorCQkJfCBTRUlfU0lSUTApCisJdTMyICAgIHNlY25yOyAvKiAgU3lzdGVtIEV4dGVybmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyIChTRUNOUikgKi8KKyNkZWZpbmUgU0VDTlJfTUlYQjBUIDB4YzAwMDAwMDAgLyogIE1JWEIwIHByaW9yaXR5IHBvc2l0aW9uIElQSUMgb3V0cHV0IGludGVycnVwdCB0eXBlICAqLworI2RlZmluZSBTRUNOUl9NSVhCMVQgMHgzMDAwMDAwMCAvKiAgTUlYQjEgcHJpb3JpdHkgcG9zaXRpb24gSVBJQyBvdXRwdXQgaW50ZXJydXB0IHR5cGUgICovCisjZGVmaW5lIFNFQ05SX01JWEEwVCAweDAwYzAwMDAwIC8qICBNSVhBMCBwcmlvcml0eSBwb3NpdGlvbiBJUElDIG91dHB1dCBpbnRlcnJ1cHQgdHlwZSAgKi8KKyNkZWZpbmUgU0VDTlJfU1lTQTFUIDB4MDAzMDAwMDAgLyogIE1JWEExIHByaW9yaXR5IHBvc2l0aW9uIElQSUMgb3V0cHV0IGludGVycnVwdCB0eXBlICAqLworI2RlZmluZSBTRUNOUl9FREkwICAgMHgwMDAwODAwMCAvKiAgSVJRMCBleHRlcm5hbCBpbnRlcnJ1cHQgZWRnZS9sZXZlbCBkZXRlY3QgICovCisjZGVmaW5lIFNFQ05SX0VESTEgICAweDAwMDA0MDAwIC8qICBJUlExIGV4dGVybmFsIGludGVycnVwdCBlZGdlL2xldmVsIGRldGVjdCAgKi8KKyNkZWZpbmUgU0VDTlJfRURJMiAgIDB4MDAwMDIwMDAgLyogIElSUTIgZXh0ZXJuYWwgaW50ZXJydXB0IGVkZ2UvbGV2ZWwgZGV0ZWN0ICAqLworI2RlZmluZSBTRUNOUl9FREkzICAgMHgwMDAwMTAwMCAvKiAgSVJRMyBleHRlcm5hbCBpbnRlcnJ1cHQgZWRnZS9sZXZlbCBkZXRlY3QgICovCisjZGVmaW5lIFNFQ05SX0VESTQgICAweDAwMDAwODAwIC8qICBJUlE0IGV4dGVybmFsIGludGVycnVwdCBlZGdlL2xldmVsIGRldGVjdCAgKi8KKyNkZWZpbmUgU0VDTlJfRURJNSAgIDB4MDAwMDA0MDAgLyogIElSUTUgZXh0ZXJuYWwgaW50ZXJydXB0IGVkZ2UvbGV2ZWwgZGV0ZWN0ICAqLworI2RlZmluZSBTRUNOUl9FREk2ICAgMHgwMDAwMDIwMCAvKiAgSVJRNiBleHRlcm5hbCBpbnRlcnJ1cHQgZWRnZS9sZXZlbCBkZXRlY3QgICovCisjZGVmaW5lIFNFQ05SX0VESTcgICAweDAwMDAwMTAwIC8qICBJUlE3IGV4dGVybmFsIGludGVycnVwdCBlZGdlL2xldmVsIGRldGVjdCAgKi8KKyNkZWZpbmUgU0VDTlJfUkVTCX4oIFNFQ05SX01JWEIwVCB8IFNFQ05SX01JWEIxVCB8IFNFQ05SX01JWEEwVCBcCisJCQl8IFNFQ05SX1NZU0ExVCB8IFNFQ05SX0VESTAgfCBTRUNOUl9FREkxIFwKKwkJCXwgU0VDTlJfRURJMiB8IFNFQ05SX0VESTMgfCBTRUNOUl9FREk0IFwKKwkJCXwgU0VDTlJfRURJNSB8IFNFQ05SX0VESTYgfCBTRUNOUl9FREk3KQorCXUzMiAgIHNlcnNyOyAvKiAgU3lzdGVtIEVycm9yIFN0YXR1cyBSZWdpc3RlciAoU0VSUikgICovCisJdTMyICAgc2VybXI7IC8qICBTeXN0ZW0gRXJyb3IgTWFzayBSZWdpc3RlciAoU0VSUikgICovCisjZGVmaW5lIFNFUlJfSVJRMCAweDgwMDAwMDAwIC8qICBJUlEwIE1DUCByZXF1ZXN0ICAqLworI2RlZmluZSBTRVJSX1dEVCAgMHg0MDAwMDAwMCAvKiAgV0RUIE1DUCByZXF1ZXN0ICAqLworI2RlZmluZSBTRVJSX1NCQSAgMHgyMDAwMDAwMCAvKiAgU0JBIE1DUCByZXF1ZXN0ICAqLworI2RlZmluZSBTRVJSX0REUiAgMHgxMDAwMDAwMCAvKiAgRERSIE1DUCByZXF1ZXN0ICAqLworI2RlZmluZSBTRVJSX0xCQyAgMHgwODAwMDAwMCAvKiAgTEJDIE1DUCByZXF1ZXN0ICAqLworI2RlZmluZSBTRVJSX1BDSTEgMHgwNDAwMDAwMCAvKiAgUENJMSBNQ1AgcmVxdWVzdCAgKi8KKyNkZWZpbmUgU0VSUl9QQ0kyIDB4MDIwMDAwMDAgLyogIFBDSTIgTUNQIHJlcXVlc3QgICovCisjZGVmaW5lIFNFUlJfTVUgICAweDAxMDAwMDAwIC8qICBNVSBNQ1AgcmVxdWVzdCAgKi8KKyNkZWZpbmUgU0VSUl9STkMgIDB4MDAwMTAwMDAgLyogIE1VIE1DUCByZXF1ZXN0ICghISEgTm9uLXZpc2libGUgZm9yIHVzZXJzICEhISkgICovCisjZGVmaW5lIFNFUlJfUkVTCX4oIFNFUlJfSVJRMCB8IFNFUlJfV0RUIHwgU0VSUl9TQkEgfCBTRVJSX0REUiBcCisJCQl8U0VSUl9MQkMgfCBTRVJSX1BDSTEgfCBTRVJSX1BDSTIgfCBTRVJSX01VIFwKKwkJCXxTRVJSX1JOQyApCisJdTMyICAgIHNlcmNyOyAvKiAgU3lzdGVtIEVycm9yIENvbnRyb2wgUmVnaXN0ZXIgIChTRVJDUikgICovCisjZGVmaW5lIFNFUkNSX01DUFIgMHgwMDAwMDAwMSAvKiAgTUNQIFJvdXRlICAqLworI2RlZmluZSBTRVJDUl9SRVMgfihTRVJDUl9NQ1BSKQorCXU4ICAgIHJlczJbNF07CisJdTMyICAgc2lmY3JfaDsgLyogIFN5c3RlbSBJbnRlcm5hbCBJbnRlcnJ1cHQgRm9yY2UgUmVnaXN0ZXIgLSBIaWdoIChTSUlIKSAgKi8KKwl1MzIgICBzaWZjcl9sOyAvKiAgU3lzdGVtIEludGVybmFsIEludGVycnVwdCBGb3JjZSBSZWdpc3RlciAtIExvdyAoU0lJTCkgICovCisJdTMyICAgc2VmY3I7ICAgLyogIFN5c3RlbSBFeHRlcm5hbCBJbnRlcnJ1cHQgRm9yY2UgUmVnaXN0ZXIgKFNFSSkgICovCisJdTMyICAgc2VyZnI7ICAgLyogIFN5c3RlbSBFcnJvciBGb3JjZSBSZWdpc3RlciAoU0VSUikgICovCisJdTggICAgcmVzM1sweEEwXTsKK30gaXBpYzgzNDlfdDsKKworLyoKKyAqIFN5c3RlbSBBcmJpdGVyIFJlZ2lzdGVycworICovCit0eXBlZGVmIHN0cnVjdCBhcmJpdGVyODM0OSB7CisJdTMyIGFjcjsgLyogQXJiaXRlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFDUl9DT1JFRElTICAgIDB4MTAwMDAwMDAgLyogQ29yZSBkaXNhYmxlLiAqLworI2RlZmluZSBBQ1JfUElQRV9ERVAgICAweDAwMDcwMDAwIC8qIFBpcGVsaW5lIGRlcHRoIChudW1iZXIgb2Ygb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zKS4gKi8KKyNkZWZpbmUgQUNSX1BDSV9SUFRDTlQgMHgwMDAwNzAwMCAvKiBQQ0kgcmVwZWF0IGNvdW50LiAqLworI2RlZmluZSBBQ1JfUlBUQ05UICAgICAweDAwMDAwNzAwIC8qIFJlcGVhdCBjb3VudC4gKi8KKyNkZWZpbmUgQUNSX0FQQVJLICAgICAgMHgwMDAwMDAzMCAvKiBBZGRyZXNzIHBhcmtpbmcuICovCisjZGVmaW5lIEFDUl9QQVJLTQkgICAweDAwMDAwMDBGIC8qIFBhcmtpbmcgbWFzdGVyLiAqLworI2RlZmluZSBBQ1JfUkVTIH4oQUNSX0NPUkVESVN8QUNSX1BJUEVfREVQfEFDUl9QQ0lfUlBUQ05UfEFDUl9SUFRDTlR8QUNSX0FQQVJLfEFDUl9QQVJLTSkKKwl1MzIgYXRyOyAvKiBBcmJpdGVyIFRpbWVycyBSZWdpc3RlciAqLworI2RlZmluZSBBVFJfRFRPIDB4MDBGRjAwMDAgLyogRGF0YSB0aW1lIG91dC4gKi8KKyNkZWZpbmUgQVRSX0FUTwkweDAwMDAwMEZGIC8qIEFkZHJlc3MgdGltZSBvdXQuICovCisjZGVmaW5lIEFUUl9SRVMgfihBVFJfRFRPfEFUUl9BVE8pCisJdTggcmVzWzRdOworCXUzMiBhZXI7IC8qIEFyYml0ZXIgRXZlbnQgUmVnaXN0ZXIgKEFFKSovCisJdTMyIGFpZHI7IC8qIEFyYml0ZXIgSW50ZXJydXB0IERlZmluaXRpb24gUmVnaXN0ZXIgKEFFKSAqLworCXUzMiBhbXI7IC8qIEFyYml0ZXIgTWFzayBSZWdpc3RlciAoQUUpICovCisJdTMyIGFlYXRyOyAvKiBBcmJpdGVyIEV2ZW50IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUVBVFJfRVZFTlQgICAweDA3MDAwMDAwIC8qIEV2ZW50IHR5cGUuICovCisjZGVmaW5lIEFFQVRSX01TVFJfSUQgMHgwMDFGMDAwMCAvKiBNYXN0ZXIgSWQuICovCisjZGVmaW5lIEFFQVRSX1RCU1QgICAgMHgwMDAwMDgwMCAvKiBUcmFuc2ZlciBidXJzdC4gKi8KKyNkZWZpbmUgQUVBVFJfVFNJWkUgICAweDAwMDAwNzAwIC8qIFRyYW5zZmVyIFNpemUuICovCisjZGVmaW5lIEFFQVRSX1RUWVBFCSAgMHgwMDAwMDAxRiAvKiBUcmFuc2ZlciBUeXBlLiAqLworI2RlZmluZSBBRUFUUl9SRVMgfihBRUFUUl9FVkVOVHxBRUFUUl9NU1RSX0lEfEFFQVRSX1RCU1R8QUVBVFJfVFNJWkV8QUVBVFJfVFRZUEUpCisJdTMyIGFlYWRyOyAvKiBBcmJpdGVyIEV2ZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1MzIgYWVycjsgLyogQXJiaXRlciBFdmVudCBSZXNwb25zZSBSZWdpc3RlciAoQUUpKi8KKyNkZWZpbmUgQUVfRVRFQSAweDAwMDAwMDIwIC8qIFRyYW5zZmVyIGVycm9yLiAqLworI2RlZmluZSBBRV9SRVNfIDB4MDAwMDAwMTAgLyogUmVzZXJ2ZWQgdHJhbnNmZXIgdHlwZS4gKi8KKyNkZWZpbmUgQUVfRUNXICAweDAwMDAwMDA4IC8qIEV4dGVybmFsIGNvbnRyb2wgd29yZCB0cmFuc2ZlciB0eXBlLiAqLworI2RlZmluZSBBRV9BTyAgIDB4MDAwMDAwMDQgLyogQWRkcmVzcyBPbmx5IHRyYW5zZmVyIHR5cGUuICovCisjZGVmaW5lIEFFX0RUTyAgMHgwMDAwMDAwMiAvKiBEYXRhIHRpbWUgb3V0LiAqLworI2RlZmluZSBBRV9BVE8JMHgwMDAwMDAwMSAvKiBBZGRyZXNzIHRpbWUgb3V0LiAqLworI2RlZmluZSBBRV9SU1JWIH4oQUVfRVRFQXxBRV9SRVNffEFFX0VDV3xBRV9BT3xBRV9EVE98QUVfQVRPKQorCXU4IHJlczFbMHhEQ107Cit9IGFyYml0ZXI4MzQ5X3Q7CisKKy8qCisgKiBSZXNldCBNb2R1bGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVzZXQ4MzQ5IHsKKwl1MzIgICAgcmN3bDsgLyogUkNXTCBSZWdpc3RlciAgKi8KKyNkZWZpbmUgUkNXTF9MQklVQ00gIDB4ODAwMDAwMDAgLyogTEJJVUNNICAqLworI2RlZmluZSBSQ1dMX0xCSVVDTV9TSElGVCAgICAzMQorI2RlZmluZSBSQ1dMX0REUkNNICAgMHg0MDAwMDAwMCAvKiBERFJDTSAgKi8KKyNkZWZpbmUgUkNXTF9ERFJDTV9TSElGVCAgICAgMzAKKyNkZWZpbmUgUkNXTF9TVkNPRCAgIDB4MzAwMDAwMDAgLyogU1ZDT0QgICovCisjZGVmaW5lIFJDV0xfU1BNRiAgICAweDBmMDAwMDAwIC8qIFNQTUYgICovCisjZGVmaW5lIFJDV0xfU1BNRl9TSElGVCAgICAgIDI0CisjZGVmaW5lIFJDV0xfQ09SRVBMTCAweDAwN0YwMDAwIC8qIENPUkVQTEwgICovCisjZGVmaW5lIFJDV0xfQ09SRVBMTF9TSElGVCAgIDE2CisjZGVmaW5lIFJDV0xfQ0VWQ09EICAweDAwMDAwMEMwIC8qIENFVkNPRCAgKi8KKyNkZWZpbmUgUkNXTF9DRVBERiAgIDB4MDAwMDAwMjAgLyogQ0VQREYgICovCisjZGVmaW5lIFJDV0xfQ0VQTUYgICAweDAwMDAwMDFGIC8qIENFUE1GICAqLworI2RlZmluZSBSQ1dMX1JFUyB+KFJDV0xfQklVQ018UkNXTF9ERFJDTXxSQ1dMX1NWQ09EfFJDV0xfU1BNRnxSQ1dMX0NPUkVQTEx8UkNXTF9DRVZDT0R8UkNXTF9DRVBERnxSQ1dMX0NFUE1GKQorCXUzMiAgICByY3doOyAvKiBSQ0hMIFJlZ2lzdGVyICAqLworI2RlZmluZSBSQ1dIX1BDSUhPU1QgMHg4MDAwMDAwMCAvKiBQQ0lIT1NUICAqLworI2RlZmluZSBSQ1dIX1BDSUhPU1RfU0hJRlQgICAzMQorI2RlZmluZSBSQ1dIX1BDSTY0ICAgMHg0MDAwMDAwMCAvKiBQQ0k2NCAgKi8KKyNkZWZpbmUgUkNXSF9QQ0kxQVJCIDB4MjAwMDAwMDAgLyogUENJMUFSQiAgKi8KKyNkZWZpbmUgUkNXSF9QQ0kyQVJCIDB4MTAwMDAwMDAgLyogUENJMkFSQiAgKi8KKyNkZWZpbmUgUkNXSF9DT1JFRElTIDB4MDgwMDAwMDAgLyogQ09SRURJUyAgKi8KKyNkZWZpbmUgUkNXSF9CTVMgICAgIDB4MDQwMDAwMDAgLyogQk1TICAqLworI2RlZmluZSBSQ1dIX0JPT1RTRVEgMHgwMzAwMDAwMCAvKiBCT09UU0VRICAqLworI2RlZmluZSBSQ1dIX1NXRU4gICAgMHgwMDgwMDAwMCAvKiBTV0VOICAqLworI2RlZmluZSBSQ1dIX1JPTUxPQyAgMHgwMDcwMDAwMCAvKiBST01MT0MgICovCisjZGVmaW5lIFJDV0hfVFNFQzFNICAweDAwMDBjMDAwIC8qIFRTRUMxTSAgKi8KKyNkZWZpbmUgUkNXSF9UU0VDMk0gIDB4MDAwMDMwMDAgLyogVFNFQzJNICAqLworI2RlZmluZSBSQ1dIX1RQUiAgICAgMHgwMDAwMDEwMCAvKiBUUFIgICovCisjZGVmaW5lIFJDV0hfVExFICAgICAweDAwMDAwMDA4IC8qIFRMRSAgKi8KKyNkZWZpbmUgUkNXSF9MQUxFICAgIDB4MDAwMDAwMDQgLyogTEFMRSAgKi8KKyNkZWZpbmUgUkNXSF9SRVMJfihSQ1dIX1BDSUhPU1QgfCBSQ1dIX1BDSTY0IHwgUkNXSF9QQ0kxQVJCIFwKKwkJCXwgUkNXSF9QQ0kyQVJCIHwgUkNXSF9DT1JFRElTIHwgUkNXSF9CTVMgXAorCQkJfCBSQ1dIX0JPT1RTRVEgfCBSQ1dIX1NXRU4gfCBSQ1dIX1JPTUxPQyBcCisJCQl8IFJDV0hfVFNFQzFNIHwgUkNXSF9UU0VDMk0gfCBSQ1dIX1RQUiBcCisJCQl8IFJDV0hfVExFIHwgUkNXSF9MQUxFKQorCXU4ICAgICByZXMwWzhdOworCXUzMiAgICByc3I7IC8qIFJlc2V0IHN0YXR1cyBSZWdpc3RlciAgKi8KKyNkZWZpbmUgUlNSX1JTVFNSQyAweEUwMDAwMDAwIC8qIFJlc2V0IHNvdXJjZSAgKi8KKyNkZWZpbmUgUlNSX1JTVFNSQ19TSElGVCAgIDI5CisjZGVmaW5lIFJTUl9CU0YgICAgMHgwMDAxMDAwMCAvKiBCb290IHNlcS4gZmFpbCAgKi8KKyNkZWZpbmUgUlNSX0JTRl9TSElGVCAgICAgIDE2CisjZGVmaW5lIFJTUl9TV1NSICAgMHgwMDAwMjAwMCAvKiBzb2Z0d2FyZSBzb2Z0IHJlc2V0ICAqLworI2RlZmluZSBSU1JfU1dTUl9TSElGVCAgICAgMTMKKyNkZWZpbmUgUlNSX1NXSFIgICAweDAwMDAxMDAwIC8qIHNvZnR3YXJlIGhhcmQgcmVzZXQgICovCisjZGVmaW5lIFJTUl9TV0hSX1NISUZUICAgICAxMgorI2RlZmluZSBSU1JfSkhSUyAgIDB4MDAwMDAyMDAgLyoganRhZyBocmVzZXQgICovCisjZGVmaW5lIFJTUl9KSFJTX1NISUZUICAgICAgOQorI2RlZmluZSBSU1JfSlNSUyAgIDB4MDAwMDAxMDAgLyoganRhZyBzcmVzZXQgc3RhdHVzICAqLworI2RlZmluZSBSU1JfSlNSU19TSElGVCAgICAgIDgKKyNkZWZpbmUgUlNSX0NTSFIgICAweDAwMDAwMDEwIC8qIGNoZWNrc3RvcCByZXNldCBzdGF0dXMgICovCisjZGVmaW5lIFJTUl9DU0hSX1NISUZUICAgICAgNAorI2RlZmluZSBSU1JfU1dSUyAgIDB4MDAwMDAwMDggLyogc29mdHdhcmUgd2F0Y2hkb2cgcmVzZXQgc3RhdHVzICAqLworI2RlZmluZSBSU1JfU1dSU19TSElGVCAgICAgIDMKKyNkZWZpbmUgUlNSX0JNUlMgICAweDAwMDAwMDA0IC8qIGJ1cyBtb25pdG9wIHJlc2V0IHN0YXR1cyAgKi8KKyNkZWZpbmUgUlNSX0JNUlNfU0hJRlQgICAgICAyCisjZGVmaW5lIFJTUl9TUlMgICAgMHgwMDAwMDAwMiAvKiBzb2Z0IHJlc2V0IHN0YXR1cyAgKi8KKyNkZWZpbmUgUlNSX1NSU19TSElGVCAgICAgICAxCisjZGVmaW5lIFJTUl9IUlMgICAgMHgwMDAwMDAwMSAvKiBoYXJkIHJlc2V0IHN0YXR1cyAgKi8KKyNkZWZpbmUgUlNSX0hSU19TSElGVCAgICAgICAwCisjZGVmaW5lIFJTUl9SRVMgfihSU1JfUlNUU1JDIHwgUlNSX0JTRiB8IFJTUl9TV1NSIHwgUlNSX1NXSFIgfCBSU1JfSkhSUyB8IFJTUl9KU1JTIHwgUlNSX0NTSFIgfCBSU1JfU1dSUyB8IFJTUl9CTVJTIHwgUlNSX1NSUyB8IFJTUl9IUlMpCisJdTMyICAgIHJtcjsgLyogUmVzZXQgbW9kZSBSZWdpc3RlciAgKi8KKyNkZWZpbmUgUk1SX0NTUkUgICAweDAwMDAwMDAxIC8qIGNoZWNrc3RvcCByZXNldCBlbmFibGUgICovCisjZGVmaW5lIFJNUl9DU1JFX1NISUZUICAgICAgMAorI2RlZmluZSBSTVJfUkVTIH4oUk1SX0NTUkUpCisJdTMyICAgIHJwcjsgLyogUmVzZXQgcHJvdGVjdGlvbiBSZWdpc3RlciAgKi8KKwl1MzIgICAgcmNyOyAvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICAqLworI2RlZmluZSBSQ1JfU1dIUiAweDAwMDAwMDAyIC8qIHNvZnR3YXJlIGhhcmQgcmVzZXQgICovCisjZGVmaW5lIFJDUl9TV1NSIDB4MDAwMDAwMDEgLyogc29mdHdhcmUgc29mdCByZXNldCAgKi8KKyNkZWZpbmUgUkNSX1JFUyB+KFJDUl9TV0hSIHwgUkNSX1NXU1IpCisJdTMyICAgIHJjZXI7IC8qIFJlc2V0IENvbnRyb2wgRW5hYmxlIFJlZ2lzdGVyICAqLworI2RlZmluZSBSQ0VSX0NSRSAweDAwMDAwMDAxIC8qIHNvZnR3YXJlIGhhcmQgcmVzZXQgICovCisjZGVmaW5lIFJDRVJfUkVTIH4oUkNFUl9DUkUpCisJdTggICAgIHJlczFbMHhEQ107Cit9IHJlc2V0ODM0OV90OworCit0eXBlZGVmIHN0cnVjdCBjbGs4MzQ5IHsKKwl1MzIgICAgc3BtcjsgLyogc3lzdGVtIFBMTCBtb2RlIFJlZ2lzdGVyICAqLworI2RlZmluZSBTUE1SX0xCSVVDTSAgMHg4MDAwMDAwMCAvKiBMQklVQ00gICovCisjZGVmaW5lIFNQTVJfRERSQ00gICAweDQwMDAwMDAwIC8qIEREUkNNICAqLworI2RlZmluZSBTUE1SX1NWQ09EICAgMHgzMDAwMDAwMCAvKiBTVkNPRCAgKi8KKyNkZWZpbmUgU1BNUl9TUE1GICAgIDB4MEYwMDAwMDAgLyogU1BNRiAgKi8KKyNkZWZpbmUgU1BNUl9DS0lEICAgIDB4MDA4MDAwMDAgLyogQ0tJRCAgKi8KKyNkZWZpbmUgU1BNUl9DS0lEX1NISUZUIDIzCisjZGVmaW5lIFNQTVJfQ09SRVBMTCAweDAwN0YwMDAwIC8qIENPUkVQTEwgICovCisjZGVmaW5lIFNQTVJfQ0VWQ09EICAweDAwMDAwMEMwIC8qIENFVkNPRCAgKi8KKyNkZWZpbmUgU1BNUl9DRVBERiAgIDB4MDAwMDAwMjAgLyogQ0VQREYgICovCisjZGVmaW5lIFNQTVJfQ0VQTUYgICAweDAwMDAwMDFGIC8qIENFUE1GICAqLworI2RlZmluZSBTUE1SX1JFUwl+KFNQTVJfTEJJVUNNIHwgU1BNUl9ERFJDTSB8IFNQTVJfU1ZDT0QgXAorCQkJfCBTUE1SX1NQTUYgfCBTUE1SX0NLSUQgfCBTUE1SX0NPUkVQTEwgXAorCQkJfCBTUE1SX0NFVkNPRCB8IFNQTVJfQ0VQREYgfCBTUE1SX0NFUE1GKQorCXUzMiAgICBvY2NyOyAvKiBvdXRwdXQgY2xvY2sgY29udHJvbCBSZWdpc3RlciAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0UwIDB4ODAwMDAwMDAgLyogUENJQ09FMCAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0UxIDB4NDAwMDAwMDAgLyogUENJQ09FMSAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0UyIDB4MjAwMDAwMDAgLyogUENJQ09FMiAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0UzIDB4MTAwMDAwMDAgLyogUENJQ09FMyAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0U0IDB4MDgwMDAwMDAgLyogUENJQ09FNCAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0U1IDB4MDQwMDAwMDAgLyogUENJQ09FNSAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0U2IDB4MDIwMDAwMDAgLyogUENJQ09FNiAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDT0U3IDB4MDEwMDAwMDAgLyogUENJQ09FNyAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDRDAgIDB4MDA4MDAwMDAgLyogUENJQ0QwICAqLworI2RlZmluZSBPQ0NSX1BDSUNEMSAgMHgwMDQwMDAwMCAvKiBQQ0lDRDEgICovCisjZGVmaW5lIE9DQ1JfUENJQ0QyICAweDAwMjAwMDAwIC8qIFBDSUNEMiAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDRDMgIDB4MDAxMDAwMDAgLyogUENJQ0QzICAqLworI2RlZmluZSBPQ0NSX1BDSUNENCAgMHgwMDA4MDAwMCAvKiBQQ0lDRDQgICovCisjZGVmaW5lIE9DQ1JfUENJQ0Q1ICAweDAwMDQwMDAwIC8qIFBDSUNENSAgKi8KKyNkZWZpbmUgT0NDUl9QQ0lDRDYgIDB4MDAwMjAwMDAgLyogUENJQ0Q2ICAqLworI2RlZmluZSBPQ0NSX1BDSUNENyAgMHgwMDAxMDAwMCAvKiBQQ0lDRDcgICovCisjZGVmaW5lIE9DQ1JfUENJMUNSICAweDAwMDAwMDAyIC8qIFBDSTFDUiAgKi8KKyNkZWZpbmUgT0NDUl9QQ0kyQ1IgIDB4MDAwMDAwMDEgLyogUENJMkNSICAqLworI2RlZmluZSBPQ0NSX1JFUwl+KE9DQ1JfUENJQ09FMCB8IE9DQ1JfUENJQ09FMSB8IE9DQ1JfUENJQ09FMiBcCisJCQl8IE9DQ1JfUENJQ09FMyB8IE9DQ1JfUENJQ09FNCB8IE9DQ1JfUENJQ09FNSBcCisJCQl8IE9DQ1JfUENJQ09FNiB8IE9DQ1JfUENJQ09FNyB8IE9DQ1JfUENJQ0QwIFwKKwkJCXwgT0NDUl9QQ0lDRDEgfCBPQ0NSX1BDSUNEMiAgfCBPQ0NSX1BDSUNEMyBcCisJCQl8IE9DQ1JfUENJQ0Q0ICB8IE9DQ1JfUENJQ0Q1IHwgT0NDUl9QQ0lDRDYgIFwKKwkJCXwgT0NDUl9QQ0lDRDcgIHwgT0NDUl9QQ0kxQ1IgIHwgT0NDUl9QQ0kyQ1IgKQorCXUzMiAgICBzY2NyOyAvKiBzeXN0ZW0gY2xvY2sgY29udHJvbCBSZWdpc3RlciAgKi8KKyNkZWZpbmUgU0NDUl9UU0VDMUNNICAweGMwMDAwMDAwIC8qIFRTRUMxQ00gICovCisjZGVmaW5lIFNDQ1JfVFNFQzFDTV9TSElGVCAzMAorI2RlZmluZSBTQ0NSX1RTRUMyQ00gIDB4MzAwMDAwMDAgLyogVFNFQzJDTSAgKi8KKyNkZWZpbmUgU0NDUl9UU0VDMkNNX1NISUZUIDI4CisjZGVmaW5lIFNDQ1JfRU5DQ00gICAgMHgwMzAwMDAwMCAvKiBFTkNDTSAgKi8KKyNkZWZpbmUgU0NDUl9FTkNDTV9TSElGVCAyNAorI2RlZmluZSBTQ0NSX1VTQk1QSENNIDB4MDBjMDAwMDAgLyogVVNCTVBIQ00gICovCisjZGVmaW5lIFNDQ1JfVVNCTVBIQ01fU0hJRlQgMjIKKyNkZWZpbmUgU0NDUl9VU0JEUkNNICAweDAwMzAwMDAwIC8qIFVTQkRSQ00gICovCisjZGVmaW5lIFNDQ1JfVVNCRFJDTV9TSElGVCAyMAorI2RlZmluZSBTQ0NSX1BDSUNNICAgIDB4MDAwMTAwMDAgLyogUENJQ00gICovCisjZGVmaW5lIFNDQ1JfUkVTCX4oIFNDQ1JfVFNFQzFDTSB8IFNDQ1JfVFNFQzJDTSB8IFNDQ1JfRU5DQ00gXAorCQkJfCBTQ0NSX1VTQk1QSENNIHwgU0NDUl9VU0JEUkNNIHwgU0NDUl9QQ0lDTSkKKwl1OCAgICAgcmVzMFsweEY0XTsKK30gY2xrODM0OV90OworCisvKgorICogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIE1vZHVsZQorICovCit0eXBlZGVmIHN0cnVjdCBwbWM4MzQ5IHsKKwl1MzIgICAgcG1jY3I7IC8qIFBNQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAqLworI2RlZmluZSBQTUNDUl9TTFBFTiAweDAwMDAwMDAxIC8qIFN5c3RlbSBMb3cgUG93ZXIgRW5hYmxlICAqLworI2RlZmluZSBQTUNDUl9ETFBFTiAweDAwMDAwMDAyIC8qIEREUiBTRFJBTSBMb3cgUG93ZXIgRW5hYmxlICAqLworI2RlZmluZSBQTUNDUl9SRVMgfihQTUNDUl9TTFBFTiB8IFBNQ0NSX0RMUEVOKQorCXUzMiAgICBwbWNlcjsgLyogUE1DIEV2ZW50IFJlZ2lzdGVyICAqLworI2RlZmluZSBQTUNFUl9QTUNJICAweDAwMDAwMDAxIC8qIFBNQyBJbnRlcnJ1cHQgICovCisjZGVmaW5lIFBNQ0VSX1JFUyB+KFBNQ0VSX1BNQ0kpCisJdTMyICAgIHBtY21yOyAvKiBQTUMgTWFzayBSZWdpc3RlciAgKi8KKyNkZWZpbmUgUE1DTVJfUE1DSUUgMHgwMDAxIC8qIFBNQyBJbnRlcnJ1cHQgRW5hYmxlICAqLworI2RlZmluZSBQTUNNUl9SRVMgfihQTUNNUl9QTUNJRSkKKwl1OCByZXMwWzB4RjRdOworfSBwbWM4MzQ5X3Q7CisKKworLyoKKyAqIGdlbmVyYWwgcHVycG9zZSBJL08gbW9kdWxlCisgKi8KK3R5cGVkZWYgc3RydWN0IGdwaW84MzQ5IHsKKwl1MzIgZGlyOyAvKiBkaXJlY3Rpb24gcmVnaXN0ZXIgKi8KKwl1MzIgb2RyOyAvKiBvcGVuIGRyYWluIHJlZ2lzdGVyICovCisJdTMyIGRhdDsgLyogZGF0YSByZWdpc3RlciAqLworCXUzMiBpZXI7IC8qIGludGVycnVwdCBldmVudCByZWdpc3RlciAqLworCXUzMiBpbXI7IC8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisJdTMyIGljcjsgLyogZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1OCByZXMwWzB4RThdOworfSBncGlvODM0OV90OworCisvKgorICogRERSIE1lbW9yeSBDb250cm9sbGVyIE1lbW9yeSBNYXAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGRyX2NzX2JuZHN7CisJdTMyIGNzYm5kczsKKyNkZWZpbmUgQ1NCTkRTX1NBIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1NCTkRTX1NBX1NISUZUICAgMTYKKyNkZWZpbmUgQ1NCTkRTX0VBIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1NCTkRTX0VBX1NISUZUICAgIDAKKwl1OCAgcmVzMFs0XTsKK30gZGRyX2NzX2JuZHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZGRyODM0OXsKKwlkZHJfY3NfYm5kc190IGNzYm5kc1s0XTsgICAgICAgICAgICAvKio8IENoaXAgU2VsZWN0IHggTWVtb3J5IEJvdW5kcyAqLworCXU4IHJlczBbMHg2MF07CisJdTMyIGNzX2NvbmZpZ1s0XTsgICAgICAgLyoqPCBDaGlwIFNlbGVjdCB4IENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ1NDT05GSUdfRU4gICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENTQ09ORklHX0FQICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDU0NPTkZJR19ST1dfQklUICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQ1NDT05GSUdfUk9XX0JJVF8xMiAweDAwMDAwMDAwCisjZGVmaW5lIENTQ09ORklHX1JPV19CSVRfMTMgMHgwMDAwMDEwMAorI2RlZmluZSBDU0NPTkZJR19ST1dfQklUXzE0IDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1NDT05GSUdfQ09MX0JJVCAgICAweDAwMDAwMDA3CisjZGVmaW5lIENTQ09ORklHX0NPTF9CSVRfOCAgMHgwMDAwMDAwMAorI2RlZmluZSBDU0NPTkZJR19DT0xfQklUXzkgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1NDT05GSUdfQ09MX0JJVF8xMCAweDAwMDAwMDAyCisjZGVmaW5lIENTQ09ORklHX0NPTF9CSVRfMTEgMHgwMDAwMDAwMworCXU4IHJlczFbMHg3OF07CisJdTMyIHRpbWluZ19jZmdfMTsgICAgICAgLyoqPCBTRFJBTSBUaW1pbmcgQ29uZmlndXJhdGlvbiAxICovCisjZGVmaW5lIFRJTUlOR19DRkcxX1BSRVRPQUNUIDB4NzAwMDAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzFfUFJFVE9BQ1RfU0hJRlQgICAyOAorI2RlZmluZSBUSU1JTkdfQ0ZHMV9BQ1RUT1BSRSAweDBGMDAwMDAwCisjZGVmaW5lIFRJTUlOR19DRkcxX0FDVFRPUFJFX1NISUZUICAgMjQKKyNkZWZpbmUgVElNSU5HX0NGRzFfQUNUVE9SVyAgMHgwMDcwMDAwMAorI2RlZmluZSBUSU1JTkdfQ0ZHMV9BQ1RUT1JXX1NISUZUICAgIDIwCisjZGVmaW5lIFRJTUlOR19DRkcxX0NBU0xBVCAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzFfQ0FTTEFUX1NISUZUICAgICAxNgorI2RlZmluZSBUSU1JTkdfQ0ZHMV9SRUZSRUMgICAweDAwMDBGMDAwCisjZGVmaW5lIFRJTUlOR19DRkcxX1JFRlJFQ19TSElGVCAgICAgMTIKKyNkZWZpbmUgVElNSU5HX0NGRzFfV1JSRUMgICAgMHgwMDAwMDcwMAorI2RlZmluZSBUSU1JTkdfQ0ZHMV9XUlJFQ19TSElGVCAgICAgICA4CisjZGVmaW5lIFRJTUlOR19DRkcxX0FDVFRPQUNUIDB4MDAwMDAwNzAKKyNkZWZpbmUgVElNSU5HX0NGRzFfQUNUVE9BQ1RfU0hJRlQgICAgNAorI2RlZmluZSBUSU1JTkdfQ0ZHMV9XUlRPUkQgICAweDAwMDAwMDA3CisjZGVmaW5lIFRJTUlOR19DRkcxX1dSVE9SRF9TSElGVCAgICAgIDAKKworCXUzMiB0aW1pbmdfY2ZnXzI7ICAgICAgIC8qKjwgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gMiAqLworI2RlZmluZSBUSU1JTkdfQ0ZHMl9DUE8gICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzJfQ1BPX1NISUZUICAgICAgICAgICAgIDI0CisjZGVmaW5lIFRJTUlOR19DRkcyX0FDU00gICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBUSU1JTkdfQ0ZHMl9XUl9EQVRBX0RFTEFZIDB4MDAwMDFDMDAKKyNkZWZpbmUgVElNSU5HX0NGRzJfV1JfREFUQV9ERUxBWV9TSElGVCAgIDEwCisKKwl1MzIgc2RyYW1fY2ZnOyAgICAgICAgICAvKio8IFNEUkFNIENvbnRyb2wgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTRFJBTV9DRkdfTUVNX0VOICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0NGR19TUkVOICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ0ZHX0VDQ19FTiAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBTRFJBTV9DRkdfUkRfRU4gICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0NGR19TRFJBTV9UWVBFIDB4MDMwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ0ZHX1NEUkFNX1RZUEVfU0hJRlQgICAyNAorI2RlZmluZSBTRFJBTV9DRkdfRFlOX1BXUiAgICAweDAwMjAwMDAwCisjZGVmaW5lIFNEUkFNX0NGR18zMl9CRSAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU0RSQU1fQ0ZHXzhfQkUgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTRFJBTV9DRkdfTkNBUCAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFNEUkFNX0NGR18yVF9FTiAgICAgIDB4MDAwMDgwMDAKKworCXU4IHJlczJbNF07CisJdTMyIHNkcmFtX21vZGU7ICAgICAgICAgLyoqPCBTRFJBTSBNb2RlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU0RSQU1fTU9ERV9FU0QgMHhGRkZGMDAwMAorI2RlZmluZSBTRFJBTV9NT0RFX0VTRF9TSElGVCAgIDE2CisjZGVmaW5lIFNEUkFNX01PREVfU0QgIDB4MDAwMEZGRkYKKyNkZWZpbmUgU0RSQU1fTU9ERV9TRF9TSElGVCAgICAgMAorCisJdTggcmVzM1s4XTsKKwl1MzIgc2RyYW1faW50ZXJ2YWw7ICAgICAvKio8IFNEUkFNIEludGVydmFsIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgU0RSQU1fSU5URVJWQUxfUkVGSU5UICAweDNGRkYwMDAwCisjZGVmaW5lIFNEUkFNX0lOVEVSVkFMX1JFRklOVF9TSElGVCAgICAxNgorI2RlZmluZSBTRFJBTV9JTlRFUlZBTF9CU1RPUFJFIDB4MDAwMDNGRkYKKyNkZWZpbmUgU0RSQU1fSU5URVJWQUxfQlNUT1BSRV9TSElGVCAgICAwCisJdTggICByZXM5WzhdOworCXUzMiAgc2RyYW1fY2xrX2NudGw7CisJdTggcmVzNFsweENDQ107CisJdTMyIGRhdGFfZXJyX2luamVjdF9oaTsgLyoqPCBNZW1vcnkgRGF0YSBQYXRoIEVycm9yIEluamVjdGlvbiBNYXNrIEhpZ2ggKi8KKwl1MzIgZGF0YV9lcnJfaW5qZWN0X2xvOyAvKio8IE1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgTG93ICovCisJdTMyIGVjY19lcnJfaW5qZWN0OyAgICAgLyoqPCBNZW1vcnkgRGF0YSBQYXRoIEVycm9yIEluamVjdGlvbiBNYXNrIEVDQyAqLworCXU4IHJlczVbMHgxNF07CisJdTMyIGNhcHR1cmVfZGF0YV9oaTsgICAgLyoqPCBNZW1vcnkgRGF0YSBQYXRoIFJlYWQgQ2FwdHVyZSBIaWdoICovCisJdTMyIGNhcHR1cmVfZGF0YV9sbzsgICAgLyoqPCBNZW1vcnkgRGF0YSBQYXRoIFJlYWQgQ2FwdHVyZSBMb3cgKi8KKwl1MzIgY2FwdHVyZV9lY2M7ICAgICAgICAvKio8IE1lbW9yeSBEYXRhIFBhdGggUmVhZCBDYXB0dXJlIEVDQyAqLworCXU4IHJlczZbMHgxNF07CisJdTMyIGVycl9kZXRlY3Q7ICAgICAgICAgLyoqPCBNZW1vcnkgRXJyb3IgRGV0ZWN0ICovCisJdTMyIGVycl9kaXNhYmxlOyAgICAgICAgLyoqPCBNZW1vcnkgRXJyb3IgRGlzYWJsZSAqLworCXUzMiBlcnJfaW50X2VuOyAgICAgICAgIC8qKjwgTWVtb3J5IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKwl1MzIgY2FwdHVyZV9hdHRyaWJ1dGVzOyAvKio8IE1lbW9yeSBFcnJvciBBdHRyaWJ1dGVzIENhcHR1cmUgKi8KKwl1MzIgY2FwdHVyZV9hZGRyZXNzOyAgICAvKio8IE1lbW9yeSBFcnJvciBBZGRyZXNzIENhcHR1cmUgKi8KKwl1MzIgY2FwdHVyZV9leHRfYWRkcmVzczsvKio8IE1lbW9yeSBFcnJvciBFeHRlbmRlZCBBZGRyZXNzIENhcHR1cmUgKi8KKwl1MzIgZXJyX3NiZTsgICAgICAgICAgICAvKio8IE1lbW9yeSBTaW5nbGUtQml0IEVDQyBFcnJvciBNYW5hZ2VtZW50ICovCisJdTggcmVzN1sweEE0XTsKKwl1MzIgZGVidWdfcmVnOworCXU4IHJlczhbMHhGQ107Cit9IGRkcjgzNDlfdDsKKworLyoKKyAqIEkyQzEgQ29udHJvbGxlcgorICovCisKKworLyoKKyAqIERVQVJUCisgKi8KK3R5cGVkZWYgc3RydWN0IGR1YXJ0ODM0OXsKKwl1OCB1cmJyX3VsY3JfdWRsYjsgLyoqPCBjb21iaW5lZCByZWdpc3RlciBmb3IgVVJCUiwgVVRIUiBhbmQgVURMQiAqLworCXU4IHVpZXJfdWRtYjsgICAgICAvKio8IGNvbWJpbmVkIHJlZ2lzdGVyIGZvciBVSUVSIGFuZCBVRE1CICovCisJdTggdWlpcl91ZmNyX3VhZnI7IC8qKjwgY29tYmluZWQgcmVnaXN0ZXIgZm9yIFVJSVIsIFVGQ1IgYW5kIFVBRlIgKi8KKwl1OCB1bGNyOyAgICAgICAgLyoqPCBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1OCB1bWNyOyAgICAgICAgLyoqPCBNT0RFTSBjb250cm9sIHJlZ2lzdGVyICovCisJdTggdWxzcjsgICAgICAgIC8qKjwgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1OCB1bXNyOyAgICAgICAgLyoqPCBNT0RFTSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1OCB1c2NyOyAgICAgICAgLyoqPCBzY3JhdGNoIHJlZ2lzdGVyICovCisJdTggcmVzMFs4XTsKKwl1OCB1ZHNyOyAgICAgICAgLyoqPCBETUEgc3RhdHVzIHJlZ2lzdGVyICovCisJdTggcmVzMVszXTsKKwl1OCByZXMyWzB4RUNdOworfSBkdWFydDgzNDlfdDsKKworLyoKKyAqIExvY2FsIEJ1cyBDb250cm9sbGVyIFJlZ2lzdGVycworICovCit0eXBlZGVmIHN0cnVjdCBsYnVzX2Jhbmt7CisJdTMyIGJyOyAgICAgICAgICAgICAvKio8IEJhc2UgUmVnaXN0ZXIgICovCisJdTMyIG9yOyAgICAgICAgICAgICAvKio8IEJhc2UgUmVnaXN0ZXIgICovCit9IGxidXNfYmFua190OworCit0eXBlZGVmIHN0cnVjdCBsYnVzODM0OSB7CisJbGJ1c19iYW5rX3QgYmFua1s4XTsKKwl1OCByZXMwWzB4MjhdOworCXUzMiBtYXI7ICAgICAgICAgICAgICAgIC8qKjwgVVBNIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1OCByZXMxWzB4NF07CisJdTMyIG1hbXI7ICAgICAgICAgICAgICAgLyoqPCBVUE1BIE1vZGUgUmVnaXN0ZXIgKi8KKwl1MzIgbWJtcjsgICAgICAgICAgICAgICAvKio8IFVQTUIgTW9kZSBSZWdpc3RlciAqLworCXUzMiBtY21yOyAgICAgICAgICAgICAgIC8qKjwgVVBNQyBNb2RlIFJlZ2lzdGVyICovCisJdTggcmVzMlsweDhdOworCXUzMiBtcnRwcjsgICAgICAgICAgICAgIC8qKjwgTWVtb3J5IFJlZnJlc2ggVGltZXIgUHJlc2NhbGVyIFJlZ2lzdGVyICovCisJdTMyIG1kcjsgICAgICAgICAgICAgICAgLyoqPCBVUE0gRGF0YSBSZWdpc3RlciAqLworCXU4IHJlczNbMHg4XTsKKwl1MzIgbHNkbXI7ICAgICAgICAgICAgICAvKio8IFNEUkFNIE1vZGUgUmVnaXN0ZXIgKi8KKwl1OCByZXM0WzB4OF07CisJdTMyIGx1cnQ7ICAgICAgICAgICAgICAgLyoqPCBVUE0gUmVmcmVzaCBUaW1lciAqLworCXUzMiBsc3J0OyAgICAgICAgICAgICAgIC8qKjwgU0RSQU0gUmVmcmVzaCBUaW1lciAqLworCXU4IHJlczVbMHg4XTsKKwl1MzIgbHRlc3I7ICAgICAgICAgICAgICAvKio8IFRyYW5zZmVyIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLworCXUzMiBsdGVkcjsgICAgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgRGlzYWJsZSBSZWdpc3RlciAqLworCXUzMiBsdGVpcjsgICAgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyICovCisJdTMyIGx0ZWF0cjsgICAgICAgICAgICAgLyoqPCBUcmFuc2ZlciBFcnJvciBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJdTMyIGx0ZWFyOyAgICAgICAgICAgICAgLyoqPCBUcmFuc2ZlciBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdTggcmVzNlsweENdOworCXUzMiBsYmNyOyAgICAgICAgICAgICAgIC8qKjwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBMQkNSX0xESVMgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTEJDUl9MRElTX1NISUZUICAgIDMxCisjZGVmaW5lIExCQ1JfQkNUTEMgMHgwMEMwMDAwMAorI2RlZmluZSBMQkNSX0JDVExDX1NISUZUICAgMjIKKyNkZWZpbmUgTEJDUl9MUEJTRSAweDAwMDIwMDAwCisjZGVmaW5lIExCQ1JfTFBCU0VfU0hJRlQgICAxNworI2RlZmluZSBMQkNSX0VQQVIgIDB4MDAwMTAwMDAKKyNkZWZpbmUgTEJDUl9FUEFSX1NISUZUICAgIDE2CisjZGVmaW5lIExCQ1JfQk1UICAgMHgwMDAwRkYwMAorI2RlZmluZSBMQkNSX0JNVF9TSElGVCAgICAgIDgKKwl1MzIgbGNycjsgICAgICAgICAgICAgICAvKio8IENsb2NrIFJhdGlvIFJlZ2lzdGVyICovCisjZGVmaW5lIExDUlJfREJZUCAgICAweDgwMDAwMDAwCisjZGVmaW5lIExDUlJfREJZUF9TSElGVCAgICAgIDMxCisjZGVmaW5lIExDUlJfQlVGQ01EQyAweDMwMDAwMDAwCisjZGVmaW5lIExDUlJfQlVGQ01EQ19TSElGVCAgIDI4CisjZGVmaW5lIExDUlJfRUNMICAgICAweDAzMDAwMDAwCisjZGVmaW5lIExDUlJfRUNMX1NISUZUICAgICAgIDI0CisjZGVmaW5lIExDUlJfRUFEQyAgICAweDAwMDMwMDAwCisjZGVmaW5lIExDUlJfRUFEQ19TSElGVCAgICAgIDE2CisjZGVmaW5lIExDUlJfQ0xLRElWICAweDAwMDAwMDBGCisjZGVmaW5lIExDUlJfQ0xLRElWX1NISUZUICAgICAwCisKKworCXU4IHJlczdbMHgyOF07CisJdTggcmVzOFsweEYwMF07Cit9IGxidXM4MzQ5X3Q7CisKKy8qCisgKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3BpODM0OQoreworCXUzMiBtb2RlOyAgICAgLyoqPCBtb2RlIHJlZ2lzdGVyICAqLworCXUzMiBldmVudDsgICAgLyoqPCBldmVudCByZWdpc3RlciAqLworCXUzMiBtYXNrOyAgICAgLyoqPCBtYXNrIHJlZ2lzdGVyICAqLworCXUzMiBjb207ICAgICAgLyoqPCBjb21tYW5kIHJlZ2lzdGVyICovCisJdTggcmVzMFsweDEwXTsKKwl1MzIgdHg7ICAgICAgIC8qKjwgdHJhbnNtaXQgcmVnaXN0ZXIgKi8KKwl1MzIgcng7ICAgICAgIC8qKjwgcmVjZWl2ZSByZWdpc3RlciAqLworCXU4IHJlczFbMHhEOF07Cit9IHNwaTgzNDlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZG1hODM0OSB7CisJdTggZml4bWVbMHgzMDBdOworfSBkbWE4MzQ5X3Q7CisKKy8qCisgKiBQQ0kgU29mdHdhcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGNpY29uZjgzNDkgeworCXUzMgljb25maWdfYWRkcmVzczsKKyNkZWZpbmUgUENJX0NPTkZJR19BRERSRVNTX0VOCTB4ODAwMDAwMDAKKyNkZWZpbmUgUENJX0NPTkZJR19BRERSRVNTX0JOX1NISUZUCTE2CisjZGVmaW5lIFBDSV9DT05GSUdfQUREUkVTU19CTl9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgUENJX0NPTkZJR19BRERSRVNTX0ROX1NISUZUCTExCisjZGVmaW5lIFBDSV9DT05GSUdfQUREUkVTU19ETl9NQVNLCTB4MDAwMGY4MDAKKyNkZWZpbmUgUENJX0NPTkZJR19BRERSRVNTX0ZOX1NISUZUCTgKKyNkZWZpbmUgUENJX0NPTkZJR19BRERSRVNTX0ZOX01BU0sJMHgwMDAwMDcwMAorI2RlZmluZSBQQ0lfQ09ORklHX0FERFJFU1NfUk5fU0hJRlQJMAorI2RlZmluZSBQQ0lfQ09ORklHX0FERFJFU1NfUk5fTUFTSwkweDAwMDAwMGZjCisJdTMyIGNvbmZpZ19kYXRhOworCXUzMiBpbnRfYWNrOworCXU4CXJlc1sxMTZdOworfSBwY2ljb25mODM0OV90OworCisvKgorICogUENJIE91dGJvdW5kIFRyYW5zbGF0aW9uIFJlZ2lzdGVyCisgKi8KK3R5cGVkZWYgc3RydWN0IHBjaV9vdXRib3VuZF93aW5kb3cgeworCXUzMglwb3RhcjsKKwl1OAlyZXMwWzRdOworCXUzMglwb2JhcjsKKwl1OAlyZXMxWzRdOworCXUzMglwb2NtcjsKKwl1OAlyZXMyWzRdOworfSBwb3Q4MzQ5X3Q7CisvKgorICogU2VxdWVuY2VyCisgKi8KK3R5cGVkZWYgc3RydWN0IGlvczgzNDkgeworCXBvdDgzNDlfdAlwb3RbNl07CisjZGVmaW5lIFBPVEFSX1RBX01BU0sJMHgwMDBmZmZmZgorI2RlZmluZQlQT0JBUl9CQV9NQVNLCTB4MDAwZmZmZmYKKyNkZWZpbmUJUE9DTVJfRU4JMHg4MDAwMDAwMAorI2RlZmluZQlQT0NNUl9JTwkweDQwMDAwMDAwCS8qIDAtLW1lbW9yeSBzcGFjZSAxLS1JL08gc3BhY2UgKi8KKyNkZWZpbmUJUE9DTVJfU0UJMHgyMDAwMDAwMAkvKiBzdHJlYW1pbmcgZW5hYmxlICovCisjZGVmaW5lCVBPQ01SX0RTVAkweDEwMDAwMDAwCS8qIDAtLVBDSTEgMS0tUENJMiovCisjZGVmaW5lCVBPQ01SX0NNX01BU0sJMHgwMDBmZmZmZgorI2RlZmluZQlQT0NNUl9DTV80RwkweDAwMDAwMDAwCisjZGVmaW5lCVBPQ01SX0NNXzJHCTB4MDAwODAwMDAKKyNkZWZpbmUJUE9DTVJfQ01fMUcJMHgwMDBDMDAwMAorI2RlZmluZQlQT0NNUl9DTV81MTJNCTB4MDAwRTAwMDAKKyNkZWZpbmUJUE9DTVJfQ01fMjU2TQkweDAwMEYwMDAwCisjZGVmaW5lCVBPQ01SX0NNXzEyOE0JMHgwMDBGODAwMAorI2RlZmluZQlQT0NNUl9DTV82NE0JMHgwMDBGQzAwMAorI2RlZmluZQlQT0NNUl9DTV8zMk0JMHgwMDBGRTAwMAorI2RlZmluZQlQT0NNUl9DTV8xNk0JMHgwMDBGRjAwMAorI2RlZmluZQlQT0NNUl9DTV84TQkweDAwMEZGODAwCisjZGVmaW5lCVBPQ01SX0NNXzRNCTB4MDAwRkZDMDAKKyNkZWZpbmUJUE9DTVJfQ01fMk0JMHgwMDBGRkUwMAorI2RlZmluZQlQT0NNUl9DTV8xTQkweDAwMEZGRjAwCisjZGVmaW5lCVBPQ01SX0NNXzUxMksJMHgwMDBGRkY4MAorI2RlZmluZQlQT0NNUl9DTV8yNTZLCTB4MDAwRkZGQzAKKyNkZWZpbmUJUE9DTVJfQ01fMTI4SwkweDAwMEZGRkUwCisjZGVmaW5lCVBPQ01SX0NNXzY0SwkweDAwMEZGRkYwCisjZGVmaW5lCVBPQ01SX0NNXzMySwkweDAwMEZGRkY4CisjZGVmaW5lCVBPQ01SX0NNXzE2SwkweDAwMEZGRkZDCisjZGVmaW5lCVBPQ01SX0NNXzhLCTB4MDAwRkZGRkUKKyNkZWZpbmUJUE9DTVJfQ01fNEsJMHgwMDBGRkZGRgorCXU4CXJlczBbMHg2MF07CisJdTMyCXBtY3I7CisJdTgJcmVzMVs0XTsKKwl1MzIJZHRjcjsKKwl1OAlyZXMyWzRdOworfSBpb3M4MzQ5X3Q7CisKKy8qCisgKiBQQ0kgQ29udHJvbGxlciBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IHBjaWN0cmw4MzQ5IHsKKwl1MzIJZXNyOworI2RlZmluZSBFU1JfTUVSUgkweDgwMDAwMDAwCisjZGVmaW5lIEVTUl9BUEFSCTB4MDAwMDA0MDAKKyNkZWZpbmUJRVNSX1BDSVNFUlIJMHgwMDAwMDIwMAorI2RlZmluZQlFU1JfTVBFUlIJMHgwMDAwMDEwMAorI2RlZmluZQlFU1JfVFBFUlIJMHgwMDAwMDA4MAorI2RlZmluZQlFU1JfTk9SU1AJMHgwMDAwMDA0MAorI2RlZmluZQlFU1JfVEFCVAkweDAwMDAwMDIwCisJdTMyCWVjZHI7CisjZGVmaW5lIEVDRFJfQVBBUgkweDAwMDAwNDAwCisjZGVmaW5lCUVDRFJfUENJU0VSUgkweDAwMDAwMjAwCisjZGVmaW5lCUVDRFJfTVBFUlIJMHgwMDAwMDEwMAorI2RlZmluZQlFQ0RSX1RQRVJSCTB4MDAwMDAwODAKKyNkZWZpbmUJRUNEUl9OT1JTUAkweDAwMDAwMDQwCisjZGVmaW5lCUVDRFJfVEFCVAkweDAwMDAwMDIwCisJdTMyIGVlcjsKKyNkZWZpbmUgRUVSX0FQQVIJMHgwMDAwMDQwMAorI2RlZmluZQlFRVJfUENJU0VSUgkweDAwMDAwMjAwCisjZGVmaW5lCUVFUl9NUEVSUgkweDAwMDAwMTAwCisjZGVmaW5lCUVFUl9UUEVSUgkweDAwMDAwMDgwCisjZGVmaW5lCUVFUl9OT1JTUAkweDAwMDAwMDQwCisjZGVmaW5lCUVFUl9UQUJUCTB4MDAwMDAwMjAKKwl1MzIJZWF0Y3I7CisjZGVmaW5lCUVBVENSX0VSUlRZUFJfTUFTSwkweDcwMDAwMDAwCisjZGVmaW5lCUVBVENSX0VSUlRZUFJfQVBSCTB4MDAwMDAwMDAJLyogYWRkcmVzcyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJRUFUQ1JfRVJSVFlQUl9XRFBSCTB4MTAwMDAwMDAJLyogd3JpdGUgZGF0YSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJRUFUQ1JfRVJSVFlQUl9SRFBSCTB4MjAwMDAwMDAJLyogcmVhZCBkYXRhIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlFQVRDUl9FUlJUWVBSX01BCTB4MzAwMDAwMDAJLyogbWFzdGVyIGFib3J0ICovCisjZGVmaW5lCUVBVENSX0VSUlRZUFJfVEEJMHg0MDAwMDAwMAkvKiB0YXJnZXQgYWJvcnQgKi8KKyNkZWZpbmUJRUFUQ1JfRVJSVFlQUl9TRQkweDUwMDAwMDAwCS8qIHN5c3RlbSBlcnJvciBpbmRpY2F0aW9uIHJlY2VpdmVkICovCisjZGVmaW5lCUVBVENSX0VSUlRZUFJfUEVBCTB4NjAwMDAwMDAJLyogcGFyaXR5IGVycm9yIGluZGljYXRpb24gcmVjZWl2ZWQgb24gYSByZWFkICovCisjZGVmaW5lCUVBVENSX0VSUlRZUFJfUEVXCTB4NzAwMDAwMDAJLyogcGFyaXR5IGVycm9yIGluZGljYXRpb24gcmVjZWl2ZWQgb24gYSB3cml0ZSAqLworI2RlZmluZSBFQVRDUl9CTl9NQVNLCQkweDBmMDAwMDAwCS8qIGJlYXQgbnVtYmVyICovCisjZGVmaW5lCUVBVENSX0JOXzFzdAkJMHgwMDAwMDAwMAorI2RlZmluZQlFQVRDUl9CTl8yZWQJCTB4MDEwMDAwMDAKKyNkZWZpbmUJRUFUQ1JfQk5fM3JkCQkweDAyMDAwMDAwCisjZGVmaW5lCUVBVENSX0JOXzR0aAkJMHgwMzAwMDAwMAorI2RlZmluZQlFQVRDUl9CTl81dGgJCTB4MDQwMDAwMAorI2RlZmluZQlFQVRDUl9CTl82dGgJCTB4MDUwMDAwMDAKKyNkZWZpbmUJRUFUQ1JfQk5fN3RoCQkweDA2MDAwMDAwCisjZGVmaW5lCUVBVENSX0JOXzh0aAkJMHgwNzAwMDAwMAorI2RlZmluZQlFQVRDUl9CTl85dGgJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRUFUQ1JfVFNfTUFTSwkJMHgwMDMwMDAwMAkvKiB0cmFuc2FjdGlvbiBzaXplICovCisjZGVmaW5lCUVBVENSX1RTXzQJCTB4MDAwMDAwMDAKKyNkZWZpbmUJRUFUQ1JfVFNfMQkJMHgwMDEwMDAwMAorI2RlZmluZQlFQVRDUl9UU18yCQkweDAwMjAwMDAwCisjZGVmaW5lCUVBVENSX1RTXzMJCTB4MDAzMDAwMDAKKyNkZWZpbmUJRUFUQ1JfRVNfTUFTSwkJMHgwMDBmMDAwMAkvKiBlcnJvciBzb3VyY2UgKi8KKyNkZWZpbmUJRUFUQ1JfRVNfRU0JCTB4MDAwMDAwMDAJLyogZXh0ZXJuYWwgbWFzdGVyICovCisjZGVmaW5lCUVBVENSX0VTX0RNQQkJMHgwMDA1MDAwMAorI2RlZmluZQlFQVRDUl9DTURfTUFTSwkJMHgwMDAwZjAwMAorI2RlZmluZQlFQVRDUl9IQkVfTUFTSwkJMHgwMDAwMGYwMAkvKiBQQ0kgaGlnaCBieXRlIGVuYWJsZSovCisjZGVmaW5lCUVBVENSX0JFX01BU0sJCTB4MDAwMDAwZjAJLyogUENJIGJ5dGUgZW5hYmxlICovCisjZGVmaW5lCUVBVENSX0hQQgkJMHgwMDAwMDAwNAkvKiBoaWdoIHBhcml0eSBiaXQgKi8KKyNkZWZpbmUJRUFUQ1JfUEIJCTB4MDAwMDAwMDIJLyogcGFyaXR5IGJpdCovCisjZGVmaW5lCUVBVENSX1ZJCQkweDAwMDAwMDAxCS8qIGVycm9yIGluZm9ybWF0aW9uIHZhbGlkICovCisJdTMyCWVhY3I7CisJdTMyCWVlYWNyOworCXUzMgllZGxjcjsKKwl1MzIJZWRoY3I7CisJdTMyCWdjcjsKKwl1MzIJZWNyOworCXUzMglnc3I7CisJdTgJcmVzMFsxMl07CisJdTMyCXBpdGFyMjsKKwl1OAlyZXMxWzRdOworCXUzMglwaWJhcjI7CisJdTMyCXBpZWJhcjI7CisJdTMyCXBpd2FyMjsKKwl1OAlyZXMyWzRdOworCXUzMglwaXRhcjE7CisJdTgJcmVzM1s0XTsKKwl1MzIJcGliYXIxOworCXUzMglwaWViYXIxOworCXUzMglwaXdhcjE7CisJdTgJcmVzNFs0XTsKKwl1MzIJcGl0YXIwOworCXU4CXJlczVbNF07CisJdTMyCXBpYmFyMDsKKwl1OAlyZXM2WzRdOworCXUzMglwaXdhcjA7CisJdTgJcmVzN1sxMzJdOworI2RlZmluZSBQSVRBUl9UQV9NQVNLCQkweDAwMGZmZmZmCisjZGVmaW5lIFBJQkFSX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgUElFQkFSX0VCQV9NQVNLCQkweDAwMGZmZmZmCisjZGVmaW5lIFBJV0FSX0VOCQkweDgwMDAwMDAwCisjZGVmaW5lIFBJV0FSX1BGCQkweDIwMDAwMDAwCisjZGVmaW5lCVBJV0FSX1JUVF9NQVNLCQkweDAwMGYwMDAwCisjZGVmaW5lCVBJV0FSX1JUVF9OT19TTk9PUAkweDAwMDQwMDAwCisjZGVmaW5lIFBJV0FSX1JUVF9TTk9PUAkJMHgwMDA1MDAwMAorI2RlZmluZQlQSVdBUl9XVFRfTUFTSwkJMHgwMDAwZjAwMAorI2RlZmluZQlQSVdBUl9XVFRfTk9fU05PT1AJMHgwMDAwNDAwMAorI2RlZmluZSBQSVdBUl9XVFRfU05PT1AJCTB4MDAwMDUwMDAKKyNkZWZpbmUJUElXQVJfSVdTX01BU0sJMHgwMDAwMDAzRgorI2RlZmluZQlQSVdBUl9JV1NfNEsJMHgwMDAwMDAwQgorI2RlZmluZQlQSVdBUl9JV1NfOEsJMHgwMDAwMDAwQworI2RlZmluZQlQSVdBUl9JV1NfMTZLCTB4MDAwMDAwMEQKKyNkZWZpbmUJUElXQVJfSVdTXzMySwkweDAwMDAwMDBFCisjZGVmaW5lCVBJV0FSX0lXU182NEsJMHgwMDAwMDAwRgorI2RlZmluZQlQSVdBUl9JV1NfMTI4SwkweDAwMDAwMDEwCisjZGVmaW5lCVBJV0FSX0lXU18yNTZLCTB4MDAwMDAwMTEKKyNkZWZpbmUJUElXQVJfSVdTXzUxMksJMHgwMDAwMDAxMgorI2RlZmluZQlQSVdBUl9JV1NfMU0JMHgwMDAwMDAxMworI2RlZmluZQlQSVdBUl9JV1NfMk0JMHgwMDAwMDAxNAorI2RlZmluZQlQSVdBUl9JV1NfNE0JMHgwMDAwMDAxNQorI2RlZmluZQlQSVdBUl9JV1NfOE0JMHgwMDAwMDAxNgorI2RlZmluZQlQSVdBUl9JV1NfMTZNCTB4MDAwMDAwMTcKKyNkZWZpbmUJUElXQVJfSVdTXzMyTQkweDAwMDAwMDE4CisjZGVmaW5lCVBJV0FSX0lXU182NE0JMHgwMDAwMDAxOQorI2RlZmluZQlQSVdBUl9JV1NfMTI4TQkweDAwMDAwMDFBCisjZGVmaW5lCVBJV0FSX0lXU18yNTZNCTB4MDAwMDAwMUIKKyNkZWZpbmUJUElXQVJfSVdTXzUxMk0JMHgwMDAwMDAxQworI2RlZmluZQlQSVdBUl9JV1NfMUcJMHgwMDAwMDAxRAorI2RlZmluZQlQSVdBUl9JV1NfMkcJMHgwMDAwMDAxRQorfSBwY2ljdHJsODM0OV90OworCisvKgorICogVVNCCisgKi8KK3R5cGVkZWYgc3RydWN0IHVzYjgzNDkgeworCXU4IGZpeG1lWzB4MjAwMF07Cit9IHVzYjgzNDlfdDsKKworLyoKKyAqIFRTRUMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgdHNlYzgzNDkgeworCXU4IGZpeG1lWzB4MTAwMF07Cit9IHRzZWM4MzQ5X3Q7CisKKy8qCisgKiBTZWN1cml0eQorICovCit0eXBlZGVmIHN0cnVjdCBzZWN1cml0eTgzNDkgeworCXU4IGZpeG1lWzB4MTAwMDBdOworfSBzZWN1cml0eTgzNDlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW1tYXAgeworCXN5c2NvbmY4MzQ5X3Qgc3lzY29uZjsgLyogU3lzdGVtIGNvbmZpZ3VyYXRpb24gKi8KKwl3ZHQ4MzQ5X3QgICAgIHdkdDsgICAgIC8qIFdhdGNoIERvZyBUaW1lciAoV0RUKSBSZWdpc3RlcnMgKi8KKwlydGNsazgzNDlfdCAgIHJ0YzsgICAgIC8qIFJlYWwgVGltZSBDbG9jayBNb2R1bGUgUmVnaXN0ZXJzICovCisJcnRjbGs4MzQ5X3QgICBwaXQ7ICAgICAvKiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciAqLworCWd0bTgzNDlfdCAgICAgZ3RtWzJdOyAgLyogR2xvYmFsIFRpbWVycyBNb2R1bGUgKi8KKwlpcGljODM0OV90ICAgIGlwaWM7ICAgIC8qIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyICovCisJYXJiaXRlcjgzNDlfdCBhcmJpdGVyOyAvKiBTeXN0ZW0gQXJiaXRlciBSZWdpc3RlcnMgKi8KKwlyZXNldDgzNDlfdCAgIHJlc2V0OyAgIC8qIFJlc2V0IE1vZHVsZSAqLworCWNsazgzNDlfdCAgICAgY2xrOyAgICAgLyogU3lzdGVtIENsb2NrIE1vZHVsZSAqLworCXBtYzgzNDlfdCAgICAgcG1jOyAgICAgLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIE1vZHVsZSAqLworCWdwaW84MzQ5X3QgICAgcGdpb1syXTsgLyogZ2VuZXJhbCBwdXJwb3NlIEkvTyBtb2R1bGUgKi8KKwl1OCByZXMwWzB4MjAwXTsKKwl1OCBERExfRERSWzB4MTAwXTsKKwl1OCBERExfTEJJVVsweDEwMF07CisJdTggcmVzMVsweEUwMF07CisJZGRyODM0OV90ICAgICBkZHI7ICAgICAvKiBERFIgTWVtb3J5IENvbnRyb2xsZXIgTWVtb3J5ICovCisJaTJjX3QgICAgIGkyY1syXTsgICAgICAvKiBJMkMxIENvbnRyb2xsZXIgKi8KKwl1OCByZXMyWzB4MTMwMF07CisJZHVhcnQ4MzQ5X3QgICBkdWFydFsyXTsvKiBEVUFSVCAqLworCXU4IHJlczNbMHg5MDBdOworCWxidXM4MzQ5X3QgICAgbGJ1czsgICAgLyogTG9jYWwgQnVzIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisJdTggcmVzNFsweDEwMDBdOworCXNwaTgzNDlfdCAgICAgc3BpOyAgICAgLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisJdTggcmVzNVsweEYwMF07CisJZG1hODM0OV90ICAgICBkbWE7ICAgICAvKiBETUEgKi8KKwlwY2ljb25mODM0OV90IHBjaV9jb25mWzJdOyAgLyogUENJIFNvZnR3YXJlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisJaW9zODM0OV90ICAgICBpb3M7ICAgICAvKiBTZXF1ZW5jZXIgKi8KKwlwY2ljdHJsODM0OV90IHBjaV9jdHJsWzJdOyAgLyogUENJIENvbnRyb2xsZXIgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLworCXU4IHJlczZbMHgxOTkwMF07CisJdXNiODM0OV90ICAgICB1c2I7CisJdHNlYzgzNDlfdCAgICB0c2VjWzJdOworCXU4IHJlczdbMHhBMDAwXTsKKwlzZWN1cml0eTgzNDlfdCBzZWN1cml0eTsKK30gaW1tYXBfdDsKKworI2VuZGlmIC8qIF9fSU1NQVBfODM0OV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oIGIvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg1eHguaAppbmRleCAxYjczZGVmLi4yZjEwZTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84NXh4LmgKQEAgLTksOSArOSw5IEBACiAjaWZuZGVmIF9fSU1NQVBfODV4eF9fCiAjZGVmaW5lIF9fSU1NQVBfODV4eF9fCiAKLQotLyogTG9jYWwtQWNjZXNzIFJlZ2lzdGVycyBhbmQgRUNNIFJlZ2lzdGVycygweDAwMDAtMHgyMDAwKSAqLwotCisvKgorICogTG9jYWwtQWNjZXNzIFJlZ2lzdGVycyBhbmQgRUNNIFJlZ2lzdGVycygweDAwMDAtMHgyMDAwKQorICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX2xvY2FsX2VjbSB7CiAJdWludAljY3NyYmFyOwkvKiAweDAgLSBDb250cm9sIENvbmZpZ3VyYXRpb24gU3RhdHVzIFJlZ2lzdGVycyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KIAljaGFyCXJlczFbNF07CkBAIC02NSw5ICs2NSw5IEBACiAJY2hhcglyZXMyNFs0OTJdOwogfSBjY3NyX2xvY2FsX2VjbV90OwogCi0KLS8qIEREUiBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMoMHgyMDAwLTB4MzAwMCkgKi8KLQorLyoKKyAqIEREUiBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMoMHgyMDAwLTB4MzAwMCkKKyAqLwogdHlwZWRlZiBzdHJ1Y3QgY2Nzcl9kZHIgewogCXVpbnQJY3MwX2JuZHM7CQkvKiAweDIwMDAgLSBERFIgQ2hpcCBTZWxlY3QgMCBNZW1vcnkgQm91bmRzICovCiAJY2hhcglyZXMxWzRdOwpAQCAtODEsMjEgKzgxLDI3IEBACiAJdWludAljczFfY29uZmlnOwkJLyogMHgyMDg0IC0gRERSIENoaXAgU2VsZWN0IENvbmZpZ3VyYXRpb24gKi8KIAl1aW50CWNzMl9jb25maWc7CQkvKiAweDIwODggLSBERFIgQ2hpcCBTZWxlY3QgQ29uZmlndXJhdGlvbiAqLwogCXVpbnQJY3MzX2NvbmZpZzsJCS8qIDB4MjA4YyAtIEREUiBDaGlwIFNlbGVjdCBDb25maWd1cmF0aW9uICovCi0JY2hhcglyZXM1WzEyMF07CisJY2hhcglyZXM1WzExMl07CisJdWludAlleHRfcmVmcmVjOwkJLyogMHgyMTAwIC0gRERSIFNEUkFNIEV4dGVuZGVkIFJlZnJlc2ggUmVjb3ZlcnkgKi8KKwl1aW50CXRpbWluZ19jZmdfMDsJCS8qIDB4MjEwNCAtIEREUiBTRFJBTSBUaW1pbmcgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAJdWludAl0aW1pbmdfY2ZnXzE7CQkvKiAweDIxMDggLSBERFIgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwogCXVpbnQJdGltaW5nX2NmZ18yOwkJLyogMHgyMTBjIC0gRERSIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KIAl1aW50CXNkcmFtX2NmZzsJCS8qIDB4MjExMCAtIEREUiBTRFJBTSBDb250cm9sIENvbmZpZ3VyYXRpb24gKi8KLQljaGFyCXJlczZbNF07CisJdWludAlzZHJhbV9jZmdfMjsJCS8qIDB4MjExNCAtIEREUiBTRFJBTSBDb250cm9sIENvbmZpZ3VyYXRpb24gMiAqLwogCXVpbnQJc2RyYW1fbW9kZTsJCS8qIDB4MjExOCAtIEREUiBTRFJBTSBNb2RlIENvbmZpZ3VyYXRpb24gKi8KLQljaGFyCXJlczdbOF07CisJdWludAlzZHJhbV9tb2RlXzI7CQkvKiAweDIxMWMgLSBERFIgU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDIqLworCXVpbnQJc2RyYW1fbWRfY250bDsJCS8qIDB4MjEyMCAtIEREUiBTRFJBTSBNb2RlIENvbnRyb2wgKi8KIAl1aW50CXNkcmFtX2ludGVydmFsOwkJLyogMHgyMTI0IC0gRERSIFNEUkFNIEludGVydmFsIENvbmZpZ3VyYXRpb24gKi8KLSNpZmRlZiBNUEM4NXh4X0REUl9TRFJBTV9DTEtfQ05UTAotCWNoYXIJcmVzN181WzhdOworCXVpbnQJc2RyYW1fZGF0YV9pbml0OwkvKiAweDIxMjggLSBERFIgU0RSQU0gRGF0YSBpbml0aWFsaXphdGlvbiAqLworCWNoYXIJcmVzNls0XTsKIAl1aW50CXNkcmFtX2Nsa19jbnRsOwkJLyogMHgyMTMwIC0gRERSIFNEUkFNIENsb2NrIENvbnRyb2wgKi8KLQljaGFyCXJlczhbMzI3Nl07Ci0jZWxzZQotCWNoYXIJcmVzOFszMjg4XTsKLSNlbmRpZgorCWNoYXIJcmVzN1syMF07CisJdWludAlpbml0X2FkZHJlc3M7CQkvKiAweDIxNDggLSBERFIgdHJhaW5pbmcgaW5pdGlhbGl6YXRpb24gYWRkcmVzcyAqLworCXVpbnQJaW5pdF9leHRfYWRkcmVzczsJLyogMHgyMTRDIC0gRERSIHRyYWluaW5nIGluaXRpYWxpemF0aW9uIGV4dGVuZGVkIGFkZHJlc3MgKi8KKwljaGFyCXJlczhfMVsyNzI4XTsKKwl1aW50CWlwX3JldjE7CQkvKiAweDJCRjggLSBERFIgSVAgQmxvY2sgUmV2aXNpb24gMSAqLworCXVpbnQJaXBfcmV2MjsJCS8qIDB4MkJGQyAtIEREUiBJUCBCbG9jayBSZXZpc2lvbiAyICovCisJY2hhcglyZXM4XzJbNTEyXTsKIAl1aW50CWRhdGFfZXJyX2luamVjdF9oaTsJLyogMHgyZTAwIC0gRERSIE1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgSGlnaCAqLwogCXVpbnQJZGF0YV9lcnJfaW5qZWN0X2xvOwkvKiAweDJlMDQgLSBERFIgTWVtb3J5IERhdGEgUGF0aCBFcnJvciBJbmplY3Rpb24gTWFzayBMb3cgKi8KIAl1aW50CWVjY19lcnJfaW5qZWN0OwkJLyogMHgyZTA4IC0gRERSIE1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgRUNDICovCkBAIC0xMTksOSArMTI1LDkgQEAKIAljaGFyCXJlczEyWzI0MF07CiB9IGNjc3JfZGRyX3Q7CiAKLQotLyogSTJDIFJlZ2lzdGVycygweDMwMDAtMHg0MDAwKSAqLwotCisvKgorICogSTJDIFJlZ2lzdGVycygweDMwMDAtMHg0MDAwKQorICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX2kyYyB7CiAJdV9jaGFyCWkyY2FkcjsJCS8qIDB4MzAwMCAtIEkyQyBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1QQzg1eHhfSTJDQURSX01BU0sJMHhGRQpAQCAtMTU4LDYgKzE2NCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQwKSBcCiAJfHwgZGVmaW5lZChDT05GSUdfTVBDODU0MSkgXAorCXx8IGRlZmluZWQoQ09ORklHX01QQzg1NDgpIFwKIAl8fCBkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogLyogRFVBUlQgUmVnaXN0ZXJzKDB4NDAwMC0weDUwMDApICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX2R1YXJ0IHsKQEAgLTIzNywxMCArMjQ0LDEwIEBACiAJY2hhcglyZXM4WzEyMDcyXTsKIH0gY2Nzcl9sYmNfdDsKIAotCi0vKiBQQ0kgUmVnaXN0ZXJzKDB4ODAwMC0weDkwMDApICovCi0vKiBPbWl0dGluZyBSZXNlcnZlZCgweDkwMDAtMHgyXzAwMDApICovCi0KKy8qCisgKiBQQ0kgUmVnaXN0ZXJzKDB4ODAwMC0weDkwMDApCisgKiBPbWl0dGluZyBSZXNlcnZlZCgweDkwMDAtMHgyXzAwMDApCisgKi8KIHR5cGVkZWYgc3RydWN0IGNjc3JfcGNpeCB7CiAJdWludAljZmdfYWRkcjsJLyogMHg4MDAwIC0gUENJWCBDb25maWd1cmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KIAl1aW50CWNmZ19kYXRhOwkvKiAweDgwMDQgLSBQQ0lYIENvbmZpZ3VyYXRpb24gRGF0YSBSZWdpc3RlciAqLwpAQCAtMzA1LDkgKzMxMiw5IEBACiAJY2hhcglyZXMxMVs5NDY4OF07CiB9IGNjc3JfcGNpeF90OwogCi0KLS8qIEwyIENhY2hlIFJlZ2lzdGVycygweDJfMDAwMC0weDJfMTAwMCkgKi8KLQorLyoKKyAqIEwyIENhY2hlIFJlZ2lzdGVycygweDJfMDAwMC0weDJfMTAwMCkKKyAqLwogdHlwZWRlZiBzdHJ1Y3QgY2Nzcl9sMmNhY2hlIHsKIAl1aW50CWwyY3RsOwkJLyogMHgyMDAwMCAtIEwyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAqLwogCWNoYXIJcmVzMVsxMl07CkBAIC0zNDksOSArMzU2LDkgQEAKIAljaGFyCXJlczE1WzQyMF07CiB9IGNjc3JfbDJjYWNoZV90OwogCi0KLS8qIERNQSBSZWdpc3RlcnMoMHgyXzEwMDAtMHgyXzIwMDApICovCi0KKy8qCisgKiBETUEgUmVnaXN0ZXJzKDB4Ml8xMDAwLTB4Ml8yMDAwKQorICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX2RtYSB7CiAJY2hhcglyZXMxWzI1Nl07CiAJdWludAltcjA7CQkvKiAweDIxMTAwIC0gRE1BIDAgTW9kZSBSZWdpc3RlciAqLwpAQCAtNDMwLDcgKzQzNyw5IEBACiAJY2hhcglyZXMyMlsxMTUxNl07CiB9IGNjc3JfZG1hX3Q7CiAKLS8qIHRzZWMxIHRzZWMyOiAyNDAwMC0yNjAwMCAqLworLyoKKyAqIHRzZWMxIHRzZWMyOiAyNDAwMC0yNjAwMAorICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX3RzZWMgewogCWNoYXIJcmVzMVsxNl07CiAJdWludAlpZXZlbnQ7CQkvKiAweDI0MDEwIC0gSW50ZXJydXB0IEV2ZW50IFJlZ2lzdGVyICovCkBAIC03MTcsOCArNzI2LDkgQEAKIAljaGFyCXJlczc0WzEwMjRdOwogfSBjY3NyX3RzZWNfdDsKIAotLyogUElDIFJlZ2lzdGVycygweDJfNjAwMC0weDRfMDAwMC0weDhfMDAwMCkgKi8KLQorLyoKKyAqIFBJQyBSZWdpc3RlcnMoMHgyXzYwMDAtMHg0XzAwMDAtMHg4XzAwMDApCisgKi8KIHR5cGVkZWYgc3RydWN0IGNjc3JfcGljIHsKIAljaGFyIAlyZXMwWzEwNjQ5Nl07CS8qIDB4MjYwMDAtMHg0MDAwMCAqLwogCWNoYXIJcmVzMVs2NF07CkBAIC0xMDI0LDE3ICsxMDM0LDE4IEBACiAJY2hhcglyZXMxNTBbMTMwODkyXTsKIH0gY2Nzcl9waWNfdDsKIAotLyogQ1BNIEJsb2NrKDB4OF8wMDAwLTB4Y18wMDAwKSAqLwotI2lmIGRlZmluZWQoQ09ORklHX01QQzg1NDApIFwKLQl8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQxKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVBDODU1NSkKKy8qCisgKiBDUE0gQmxvY2soMHg4XzAwMDAtMHhjXzAwMDApCisgKi8KKyNpZm5kZWYgQ09ORklHX0NQTTIKIHR5cGVkZWYgc3RydWN0IGNjc3JfY3BtIHsKIAljaGFyIHJlc1syNjIxNDRdOwogfSBjY3NyX2NwbV90OwogI2Vsc2UKLS8qIDB4ODAwMC0weDhmZmZmOkRQQVJNICovCi0KLS8qIDB4OTAwMC0weDkwYmZmOiBHZW5lcmFsIFNJVSAqLworLyoKKyAqIDB4ODAwMC0weDhmZmZmOkRQQVJNCisgKiAweDkwMDAtMHg5MGJmZjogR2VuZXJhbCBTSVUKKyAqLwogdHlwZWRlZiBzdHJ1Y3QgY2Nzcl9jcG1fc2l1IHsKIAljaGFyIAlyZXMxWzgwXTsKIAl1aW50CXNtYWVyOwpAQCAtMTMyNSw3ICsxMzM2LDYgQEAKIAljaGFyICAgICAgICAgICAgCXJlczFbMTYqMTAyNF07CiAJdV9jaGFyICAgICAgICAgIAlpbV9kcHJhbTJbMTYqMTAyNF07CiAJY2hhciAgICAgICAgICAgIAlyZXMyWzE2KjEwMjRdOwotCiAJY2Nzcl9jcG1fc2l1X3QgIAlpbV9jcG1fc2l1OyAgICAgLyogU0lVIENvbmZpZ3VyYXRpb24gKi8KIAljY3NyX2NwbV9pbnRjdGxfdCAgICAJaW1fY3BtX2ludGN0bDsgIC8qIEludGVycnVwdCBDb250cm9sbGVyICovCiAJY2Nzcl9jcG1faW9wX3QgICAgICAgCWltX2NwbV9pb3A7ICAgICAvKiBJTyBQb3J0IGNvbnRyb2wvc3RhdHVzICovCkBAIC0xMzUwLDggKzEzNjAsMTAgQEAKIAljY3NyX2NwbV9pcmFtX3QJCWltX2NwbV9pcmFtOwogfSBjY3NyX2NwbV90OwogI2VuZGlmCi0vKiBSYXBpZElPIFJlZ2lzdGVycygweGNfMDAwMC0weGVfMDAwMCkgKi8KIAorLyoKKyAqIFJhcGlkSU8gUmVnaXN0ZXJzKDB4Y18wMDAwLTB4ZV8wMDAwKQorICovCiB0eXBlZGVmIHN0cnVjdCBjY3NyX3JpbyB7CiAJdWludAlkaWRjYXI7CQkvKiAweGMwMDAwIC0gRGV2aWNlIElkZW50aXR5IENhcGFiaWxpdHkgUmVnaXN0ZXIgKi8KIAl1aW50CWRpY2FyOwkJLyogMHhjMDAwNCAtIERldmljZSBJbmZvcm1hdGlvbiBDYXBhYmlsaXR5IFJlZ2lzdGVyICovCkBAIC0xNTE3LDcgKzE1MjksOSBAQAogCWNoYXIJcmVzNThbNjAxNzZdOwogfSBjY3NyX3Jpb190OwogCi0vKiBHbG9iYWwgVXRpbGl0aWVzIFJlZ2lzdGVyIEJsb2NrKDB4ZV8wMDAwLTB4Zl9mZmZmKSAqLworLyoKKyAqIEdsb2JhbCBVdGlsaXRpZXMgUmVnaXN0ZXIgQmxvY2soMHhlXzAwMDAtMHhmX2ZmZmYpCisgKi8KIHR5cGVkZWYgc3RydWN0IGNjc3JfZ3VyIHsKIAl1aW50CXBvcnBsbHNyOwkvKiAweGUwMDAwIC0gUE9SIFBMTCByYXRpbyBzdGF0dXMgcmVnaXN0ZXIgKi8KIAl1aW50CXBvcmJtc3I7CS8qIDB4ZTAwMDQgLSBQT1IgYm9vdCBtb2RlIHN0YXR1cyByZWdpc3RlciAqLwpAQCAtMTU0OSw3ICsxNTYzLDEzIEBACiAJdWludAlkZHJkbGxjcjsJLyogMHhlMGUxMCAtIEREUiBETEwgY29udHJvbCByZWdpc3RlciAqLwogCWNoYXIJcmVzMTJbMTJdOwogCXVpbnQJbGJjZGxsY3I7CS8qIDB4ZTBlMjAgLSBMQkMgRExMIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQljaGFyCXJlczEzWzYxOTE1XTsKKwljaGFyCXJlczEzWzI0OF07CisJdWludAlsYml1aXBsbGRjcjA7CS8qIDB4ZTBmMWMgLS0gTEJJVSBQTEwgRGVidWcgUmVnIDAgKi8KKwl1aW50CWxiaXVpcGxsZGNyMTsJLyogMHhlMGYyMCAtLSBMQklVIFBMTCBEZWJ1ZyBSZWcgMSAqLworCXVpbnQJZGRyaW9vdmNyOwkvKiAweGUwZjI0IC0gRERSIElPIE92ZXJyaWRlIENvbnRyb2wgKi8KKwl1aW50CXJlczE0OwkJLyogMHhlMGYyOCAqLworCXVpbnQJdHNlYzM0aW9vdmNyOwkvKiAweGUwZjJjIC0gZVRTRUMgMy80IElPIG92ZXJyaWRlIGNvbnRyb2wgKi8KKwljaGFyCXJlczE1WzYxNjUxXTsKIH0gY2Nzcl9ndXJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaW1tYXAgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgzNDlfcGNpLmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODM0OV9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI1NWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzNDlfcGNpLmgKQEAgLTAsMCArMSwxNjcgQEAKKyNpZm5kZWYgX1BQQ19LRVJORUxfTVBDODM0OV9QQ0lfSAorI2RlZmluZSBfUFBDX0tFUk5FTF9NUEM4MzQ5X1BDSV9ICisKKworI2RlZmluZSBNODI2NV9QQ0lCUjAJMHgxMDFhYworI2RlZmluZSBNODI2NV9QQ0lCUjEJMHgxMDFiMAorI2RlZmluZSBNODI2NV9QQ0lNU0swCTB4MTAxYzQKKyNkZWZpbmUgTTgyNjVfUENJTVNLMQkweDEwMWM4CisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJQlIgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUENJQlJfRU5BQkxFICAgICAgICAweDAwMDAwMDAxCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJTVNLIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDSU1TS18zMktCICAgICAgICAgMHhGRkZGODAwMCAgLyogU2l6ZSBvZiB3aW5kb3csIHNtYWxsZXN0ICovCisjZGVmaW5lIFBDSU1TS182NEtCICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBQQ0lNU0tfMTI4S0IgICAgICAgIDB4RkZGRTAwMDAKKyNkZWZpbmUgUENJTVNLXzI1NktCICAgICAgICAweEZGRkMwMDAwCisjZGVmaW5lIFBDSU1TS181MTJLQiAgICAgICAgMHhGRkY4MDAwMAorI2RlZmluZSBQQ0lNU0tfMU1CICAgICAgICAgIDB4RkZGMDAwMDAKKyNkZWZpbmUgUENJTVNLXzJNQiAgICAgICAgICAweEZGRTAwMDAwCisjZGVmaW5lIFBDSU1TS180TUIgICAgICAgICAgMHhGRkMwMDAwMAorI2RlZmluZSBQQ0lNU0tfOE1CICAgICAgICAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgUENJTVNLXzE2TUIgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIFBDSU1TS18zMk1CICAgICAgICAgMHhGRTAwMDAwMAorI2RlZmluZSBQQ0lNU0tfNjRNQiAgICAgICAgIDB4RkMwMDAwMDAKKyNkZWZpbmUgUENJTVNLXzEyOE1CICAgICAgICAweEY4MDAwMDAwCisjZGVmaW5lIFBDSU1TS18yNTZNQiAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBQQ0lNU0tfNTEyTUIgICAgICAgIDB4RTAwMDAwMDAKKyNkZWZpbmUgUENJTVNLXzFHQiAgICAgICAgICAweEMwMDAwMDAwICAvKiBTaXplIG9mIHdpbmRvdywgbGFyZ2VzdCAqLworCisKKyNkZWZpbmUgTTgyNlhfU0NDUl9QQ0lfTU9ERV9FTiAweDEwMAorCisKKy8qCisgKiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzICgzIHNldHMpLiBUaGVzZSByZWdpc3RlcnMgY29udHJvbCBob3cgNjB4IGJ1cworICogKGxvY2FsKSBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgdG8gUENJIGFkZHJlc3NlcyB3aGVuIHRoZSBNUEM4MjZ4IGlzCisgKiBhIFBDSSBidXMgbWFzdGVyIChpbml0aWF0b3IpLgorICovCisKKyNkZWZpbmUgUE9UQVJfUkVHMCAgICAgICAgICAweDEwODAwICAgICAvKiBQQ0kgT3V0Ym91bmQgVHJhbnNsYXRpb24gQWRkciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9UQVJfUkVHMSAgICAgICAgICAweDEwODE4CisjZGVmaW5lIFBPVEFSX1JFRzIgICAgICAgICAgMHgxMDgzMAorCisjZGVmaW5lIFBPQkFSX1JFRzAgICAgICAgICAgMHgxMDgwOCAgICAgLyogUENJIE91dGJvdW5kIEJhc2UgQWRkciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9CQVJfUkVHMSAgICAgICAgICAweDEwODIwCisjZGVmaW5lIFBPQkFSX1JFRzIgICAgICAgICAgMHgxMDgzOAorCisjZGVmaW5lIFBPQ01SX1JFRzAgICAgICAgICAgMHgxMDgxMCAgICAgLyogUENJIE91dGJvdW5kIENvbXBhcmlzb24gTWFzayByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE9DTVJfUkVHMSAgICAgICAgICAweDEwODI4CisjZGVmaW5lIFBPQ01SX1JFRzIgICAgICAgICAgMHgxMDg0MAorCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFBPTUNSIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBPQ01SX01BU0tfNEtCICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBQT0NNUl9NQVNLXzhLQiAgICAgIDB4MDAwRkZGRkUKKyNkZWZpbmUgUE9DTVJfTUFTS18xNktCICAgICAweDAwMEZGRkZDCisjZGVmaW5lIFBPQ01SX01BU0tfMzJLQiAgICAgMHgwMDBGRkZGOAorI2RlZmluZSBQT0NNUl9NQVNLXzY0S0IgICAgIDB4MDAwRkZGRjAKKyNkZWZpbmUgUE9DTVJfTUFTS18xMjhLQiAgICAweDAwMEZGRkUwCisjZGVmaW5lIFBPQ01SX01BU0tfMjU2S0IgICAgMHgwMDBGRkZDMAorI2RlZmluZSBQT0NNUl9NQVNLXzUxMktCICAgIDB4MDAwRkZGODAKKyNkZWZpbmUgUE9DTVJfTUFTS18xTUIgICAgICAweDAwMEZGRjAwCisjZGVmaW5lIFBPQ01SX01BU0tfMk1CICAgICAgMHgwMDBGRkUwMAorI2RlZmluZSBQT0NNUl9NQVNLXzRNQiAgICAgIDB4MDAwRkZDMDAKKyNkZWZpbmUgUE9DTVJfTUFTS184TUIgICAgICAweDAwMEZGODAwCisjZGVmaW5lIFBPQ01SX01BU0tfMTZNQiAgICAgMHgwMDBGRjAwMAorI2RlZmluZSBQT0NNUl9NQVNLXzMyTUIgICAgIDB4MDAwRkUwMDAKKyNkZWZpbmUgUE9DTVJfTUFTS182NE1CICAgICAweDAwMEZDMDAwCisjZGVmaW5lIFBPQ01SX01BU0tfMTI4TUIgICAgMHgwMDBGODAwMAorI2RlZmluZSBQT0NNUl9NQVNLXzI1Nk1CICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgUE9DTVJfTUFTS181MTJNQiAgICAweDAwMEUwMDAwCisjZGVmaW5lIFBPQ01SX01BU0tfMUdCICAgICAgMHgwMDBDMDAwMAorCisjZGVmaW5lIFBPQ01SX0VOQUJMRSAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBQT0NNUl9QQ0lfSU8gICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUE9DTVJfUFJFRkVUQ0hfRU4gICAweDIwMDAwMDAwCisKKy8qIFNvZnQgUENJIHJlc2V0ICovCisKKyNkZWZpbmUgUENJX0dDUl9SRUcgICAgICAgICAweDEwODgwCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgUENJX0dDUiByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQ0lHQ1JfUENJX0JVU19FTiAgIDB4MQorCisvKgorICogSW5ib3VuZCBBVFUgcmVnaXN0ZXJzICgyIHNldHMpLiBUaGVzZSByZWdpc3RlcnMgY29udHJvbCBob3cgUENJCisgKiBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgdG8gNjB4IGJ1cyAobG9jYWwpIGFkZHJlc3NlcyB3aGVuIHRoZQorICogTVBDODI2eCBpcyBhIFBDSSBidXMgdGFyZ2V0LgorICovCisKKyNkZWZpbmUgUElUQVJfUkVHMSAgICAgICAgICAweDEwOEQwCisjZGVmaW5lIFBJQkFSX1JFRzEgICAgICAgICAgMHgxMDhEOAorI2RlZmluZSBQSUNNUl9SRUcxICAgICAgICAgIDB4MTA4RTAKKyNkZWZpbmUgUElUQVJfUkVHMCAgICAgICAgICAweDEwOEU4CisjZGVmaW5lIFBJQkFSX1JFRzAgICAgICAgICAgMHgxMDhGMAorI2RlZmluZSBQSUNNUl9SRUcwICAgICAgICAgIDB4MTA4RjgKKworLyogQml0IGRlZmluaXRpb25zIGZvciBQQ0kgSW5ib3VuZCBDb21wYXJpc29uIE1hc2sgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUElDTVJfTUFTS180S0IgICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBQSUNNUl9NQVNLXzhLQiAgICAgICAweDAwMEZGRkZFCisjZGVmaW5lIFBJQ01SX01BU0tfMTZLQiAgICAgIDB4MDAwRkZGRkMKKyNkZWZpbmUgUElDTVJfTUFTS18zMktCICAgICAgMHgwMDBGRkZGOAorI2RlZmluZSBQSUNNUl9NQVNLXzY0S0IgICAgICAweDAwMEZGRkYwCisjZGVmaW5lIFBJQ01SX01BU0tfMTI4S0IgICAgIDB4MDAwRkZGRTAKKyNkZWZpbmUgUElDTVJfTUFTS18yNTZLQiAgICAgMHgwMDBGRkZDMAorI2RlZmluZSBQSUNNUl9NQVNLXzUxMktCICAgICAweDAwMEZGRjgwCisjZGVmaW5lIFBJQ01SX01BU0tfMU1CICAgICAgIDB4MDAwRkZGMDAKKyNkZWZpbmUgUElDTVJfTUFTS18yTUIgICAgICAgMHgwMDBGRkUwMAorI2RlZmluZSBQSUNNUl9NQVNLXzRNQiAgICAgICAweDAwMEZGQzAwCisjZGVmaW5lIFBJQ01SX01BU0tfOE1CICAgICAgIDB4MDAwRkY4MDAKKyNkZWZpbmUgUElDTVJfTUFTS18xNk1CICAgICAgMHgwMDBGRjAwMAorI2RlZmluZSBQSUNNUl9NQVNLXzMyTUIgICAgICAweDAwMEZFMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfNjRNQiAgICAgIDB4MDAwRkMwMDAKKyNkZWZpbmUgUElDTVJfTUFTS18xMjhNQiAgICAgMHgwMDBGODAwMAorI2RlZmluZSBQSUNNUl9NQVNLXzI1Nk1CICAgICAweDAwMEYwMDAwCisjZGVmaW5lIFBJQ01SX01BU0tfNTEyTUIgICAgIDB4MDAwRTAwMDAKKyNkZWZpbmUgUElDTVJfTUFTS18xR0IgICAgICAgMHgwMDBDMDAwMAorCisjZGVmaW5lIFBJQ01SX0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUElDTVJfTk9fU05PT1BfRU4gICAgMHg0MDAwMDAwMAorI2RlZmluZSBQSUNNUl9QUkVGRVRDSF9FTiAgICAweDIwMDAwMDAwCisKKy8qIFBDSSBlcnJvciBSZWdpc3RlcnMgKi8KKworI2RlZmluZQlQQ0lfRVJST1JfU1RBVFVTX1JFRwkJMHgxMDg4NAorI2RlZmluZQlQQ0lfRVJST1JfTUFTS19SRUcJCTB4MTA4ODgKKyNkZWZpbmUJUENJX0VSUk9SX0NPTlRST0xfUkVHCQkweDEwODhDCisjZGVmaW5lIFBDSV9FUlJPUl9BRFJTX0NBUFRVUkVfUkVHICAgICAgMHgxMDg5MAorI2RlZmluZSBQQ0lfRVJST1JfREFUQV9DQVBUVVJFX1JFRyAgICAgIDB4MTA4OTgKKyNkZWZpbmUgUENJX0VSUk9SX0NUUkxfQ0FQVFVSRV9SRUcgICAgICAweDEwOEEwCisKKy8qIFBDSSBlcnJvciBSZWdpc3RlciBiaXQgZGVmaW5lcyAqLworCisjZGVmaW5lCVBDSV9FUlJPUl9QQ0lfQUREUl9QQVIJCQkweDAwMDAwMDAxCisjZGVmaW5lCVBDSV9FUlJPUl9QQ0lfREFUQV9QQVJfV1IJCTB4MDAwMDAwMDIKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9EQVRBX1BBUl9SRAkJMHgwMDAwMDAwNAorI2RlZmluZQlQQ0lfRVJST1JfUENJX05PX1JTUAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9UQVJfQUJUCQkJMHgwMDAwMDAxMAorI2RlZmluZQlQQ0lfRVJST1JfUENJX1NFUlIJCQkweDAwMDAwMDIwCisjZGVmaW5lCVBDSV9FUlJPUl9QQ0lfUEVSUl9SRAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUENJX0VSUk9SX1BDSV9QRVJSX1dSCQkJMHgwMDAwMDA4MAorI2RlZmluZQlQQ0lfRVJST1JfSTJPX09GUU8JCQkweDAwMDAwMTAwCisjZGVmaW5lCVBDSV9FUlJPUl9JMk9fSVBRTwkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJUENJX0VSUk9SX0lSQQkJCQkweDAwMDAwNDAwCisjZGVmaW5lCVBDSV9FUlJPUl9OTUkJCQkJMHgwMDAwMDgwMAorI2RlZmluZQlQQ0lfRVJST1JfSTJPX0RCTUMJCQkweDAwMDAxMDAwCisKKy8qCisgKiBSZWdpc3RlciBwYWlyIHVzZWQgdG8gZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBjeWNsZXMgb24gdGhlIFBDSSBidXMKKyAqIGFuZCBhY2Nlc3MgdGhlIE1QQzgyNngncyBvd24gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorICovCisKKyNkZWZpbmUgUENJX0NGR19BRERSX1JFRyAgICAgMHgxMDkwMAorI2RlZmluZSBQQ0lfQ0ZHX0RBVEFfUkVHICAgICAweDEwOTA0CisKKy8qIEJ1cyBwYXJraW5nIGRlY2lkZXMgd2hlcmUgdGhlIGJ1cyBjb250cm9sIHNpdHMgd2hlbiBpZGxlICovCisvKiBJZiBtb2RpZnlpbmcgbWVtb3J5IGNvbnRyb2xsZXJzIGZvciBQQ0kgcGFyayBvbiB0aGUgY29yZSAqLworCisjZGVmaW5lIFBQQ19BQ1JfQlVTX1BBUktfQ09SRSAweDYKKyNkZWZpbmUgUFBDX0FDUl9CVVNfUEFSS19QQ0kgIDB4MworCisjZW5kaWYgLyogX1BQQ19LRVJORUxfTTgyNjBfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaAppbmRleCA4MDYwODVlLi42YjEzMWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Byb2Nlc3Nvci5oCkBAIC0yMDAsNiArMjAwLDExIEBACiAjZGVmaW5lIFNQUk5fSEFTSDEJMHgzRDIJLyogUHJpbWFyeSBIYXNoIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9IQVNIMgkweDNEMwkvKiBTZWNvbmRhcnkgSGFzaCBBZGRyZXNzIFJlc2dpc3RlciAqLwogI2RlZmluZSBTUFJOX0hJRDAJMHgzRjAJLyogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24gUmVnaXN0ZXIgMCAqLworCisjZGVmaW5lIEhJRDBfSUNFX1NISUZUCQkxNQorI2RlZmluZSBISUQwX0RDRV9TSElGVAkJMTQKKyNkZWZpbmUgSElEMF9ETE9DS19TSElGVAkxMgorCiAjZGVmaW5lICAgSElEMF9FTUNQCSgxPDwzMSkJCS8qIEVuYWJsZSBNYWNoaW5lIENoZWNrIHBpbiAqLwogI2RlZmluZSAgIEhJRDBfRUJBCSgxPDwyOSkJCS8qIEVuYWJsZSBCdXMgQWRkcmVzcyBQYXJpdHkgKi8KICNkZWZpbmUgICBISUQwX0VCRAkoMTw8MjgpCQkvKiBFbmFibGUgQnVzIERhdGEgUGFyaXR5ICovCkBAIC0yMTEsMTAgKzIxNiwxMCBAQAogI2RlZmluZSAgIEhJRDBfTkFQCSgxPDwyMikKICNkZWZpbmUgICBISUQwX1NMRUVQCSgxPDwyMSkKICNkZWZpbmUgICBISUQwX0RQTQkoMTw8MjApCi0jZGVmaW5lICAgSElEMF9JQ0UJKDE8PDE1KQkJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRW5hYmxlICovCi0jZGVmaW5lICAgSElEMF9EQ0UJKDE8PDE0KQkJLyogRGF0YSBDYWNoZSBFbmFibGUgKi8KKyNkZWZpbmUgICBISUQwX0lDRQkoMTw8SElEMF9JQ0VfU0hJRlQpCS8qIEluc3RydWN0aW9uIENhY2hlIEVuYWJsZSAqLworI2RlZmluZSAgIEhJRDBfRENFCSgxPDxISUQwX0RDRV9TSElGVCkJLyogRGF0YSBDYWNoZSBFbmFibGUgKi8KICNkZWZpbmUgICBISUQwX0lMT0NLCSgxPDwxMykJCS8qIEluc3RydWN0aW9uIENhY2hlIExvY2sgKi8KLSNkZWZpbmUgICBISUQwX0RMT0NLCSgxPDwxMikJCS8qIERhdGEgQ2FjaGUgTG9jayAqLworI2RlZmluZSAgIEhJRDBfRExPQ0sJKDE8PEhJRDBfRExPQ0tfU0hJRlQpCS8qIERhdGEgQ2FjaGUgTG9jayAqLwogI2RlZmluZSAgIEhJRDBfSUNGSQkoMTw8MTEpCQkvKiBJbnN0ci4gQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLwogI2RlZmluZSAgIEhJRDBfRENGSQkoMTw8MTApCQkvKiBEYXRhIENhY2hlIEZsYXNoIEludmFsaWRhdGUgKi8KICNkZWZpbmUgICBISUQwX0RDSQlISUQwX0RDRkkKQEAgLTQyMCw2ICs0MjUsNyBAQAogI2RlZmluZSBTUFJOX01BUzQgICAgICAgMHgyNzQgICAvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDQgKi8KICNkZWZpbmUgU1BSTl9NQVM1ICAgICAgIDB4Mjc1ICAgLyogTU1VIEFzc2lzdCBSZWdpc3RlciA1ICovCiAjZGVmaW5lIFNQUk5fTUFTNiAgICAgICAweDI3NiAgIC8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgNiAqLworI2RlZmluZSBTUFJOX01BUzcJMHgzQjAJLyogTU1VIEFzc2lzdCBSZWdpc3RlciA3ICovCiAKICNkZWZpbmUgU1BSTl9JVk9SMzIgICAgIDB4MjEwICAgLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzIgKi8KICNkZWZpbmUgU1BSTl9JVk9SMzMgICAgIDB4MjExICAgLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzMgKi8KQEAgLTU4NCw2ICs1OTAsNyBAQAogI2RlZmluZSBNQVM0CVNQUk5fTUFTNAogI2RlZmluZSBNQVM1CVNQUk5fTUFTNQogI2RlZmluZSBNQVM2CVNQUk5fTUFTNgorI2RlZmluZSBNQVM3CVNQUk5fTUFTNwogCiAvKiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKi8KIApAQCAtNzk0LDYgKzgwMSw4IEBACiAjZGVmaW5lIFNWUl84NTYwCTB4ODA3MAogI2RlZmluZSBTVlJfODU1NQkweDgwNzkKICNkZWZpbmUgU1ZSXzg1NDEJMHg4MDdBCisjZGVmaW5lIFNWUl84NTQ4CTB4ODAzMQorI2RlZmluZSBTVlJfODU0OF9FCTB4ODAzOQogCiAKIC8qIEkgYW0ganVzdCBhZGRpbmcgYSBzaW5nbGUgZW50cnkgZm9yIDgyNjAgYm9hcmRzLiAgSSB0aGluayB3ZSBtYXkgYmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy91LWJvb3QuaCBiL2luY2x1ZGUvYXNtLXBwYy91LWJvb3QuaAppbmRleCBhNzU5MzE1Li41YjZjZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvdS1ib290LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3UtYm9vdC5oCkBAIC00NSw2ICs0NSw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVBDNXh4eCkKIAl1bnNpZ25lZCBsb25nCWJpX21iYXJfYmFzZTsJLyogYmFzZSBvZiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX01QQzgzWFgpCisJdW5zaWduZWQgbG9uZwliaV9pbW1yYmFyOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODIyMCkKIAl1bnNpZ25lZCBsb25nCWJpX21iYXJfYmFzZTsJLyogYmFzZSBvZiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KIAl1bnNpZ25lZCBsb25nICAgYmlfaW5wZnJlcTsgICAgIC8qIElucHV0IEZyZXEsIEluIE1IeiAqLwpAQCAtNTksNyArNjIsNyBAQAogCXVuc2lnbmVkIHNob3J0CWJpX2V0aHNwZWVkOwkvKiBFdGhlcm5ldCBzcGVlZCBpbiBNYnBzICovCiAJdW5zaWduZWQgbG9uZwliaV9pbnRmcmVxOwkvKiBJbnRlcm5hbCBGcmVxLCBpbiBNSHogKi8KIAl1bnNpZ25lZCBsb25nCWJpX2J1c2ZyZXE7CS8qIEJ1cyBGcmVxLCBpbiBNSHogKi8KLSNpZiBkZWZpbmVkKENPTkZJR184MjYwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTYwKQorI2lmIGRlZmluZWQoQ09ORklHX0NQTTIpCiAJdW5zaWduZWQgbG9uZwliaV9jcG1mcmVxOwkvKiBDUE1fQ0xLIEZyZXEsIGluIE1IeiAqLwogCXVuc2lnbmVkIGxvbmcJYmlfYnJnZnJlcTsJLyogQlJHX0NMSyBGcmVxLCBpbiBNSHogKi8KIAl1bnNpZ25lZCBsb25nCWJpX3NjY2ZyZXE7CS8qIFNDQ19DTEsgRnJlcSwgaW4gTUh6ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCA2MjVjMzg5Li5lZmM2MzhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTgzLDYgKzgzLDEwIEBACiAjaW5jbHVkZSA8bXBjODV4eC5oPgogI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVBDODNYWAorI2luY2x1ZGUgPG1wYzgzeHguaD4KKyNpbmNsdWRlIDxhc20vaW1tYXBfODN4eC5oPgorI2VuZGlmCiAjaWZkZWYJQ09ORklHXzR4eAogI2luY2x1ZGUgPHBwYzR4eC5oPgogI2VuZGlmCkBAIC00MDksOCArNDEzLDkgQEAKIGludAlhZGp1c3Rfc2RyYW1fdGJzXzh4eCAodm9pZCk7CiAjaWYgZGVmaW5lZChDT05GSUdfODI2MCkKIGludAlwcnRfODI2MF9jbGtzICh2b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQoraW50IHByaW50X2Nsb2NrX2NvbmYodm9pZCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KQogaW50CXBydF9tcGM1eHh4X2Nsa3MgKHZvaWQpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODIyMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUFU4Ni5oIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKaW5kZXggY2U3Y2NjMi4uMDkxODViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVCQkqLwogI2RlZmluZSBDT05GSUdfQ1BVODYJCTEJLyogLi4ub24gYSBDUFU4NiBib2FyZAkqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCiAKIC8qCiAgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0NQVTg3LmggYi9pbmNsdWRlL2NvbmZpZ3MvQ1BVODcuaAppbmRleCAwZTA4NzZmLi5jNTA4NzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQ1BVODcuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQ1BVODcuaApAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVCQkqLwogI2RlZmluZSBDT05GSUdfQ1BVODcJCTEJLyogLi4ub24gYSBDUFU4NyBib2FyZAkqLwogI2RlZmluZSBDT05GSUdfUENJCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogLyoKICAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvSURTODI0Ny5oIGIvaW5jbHVkZS9jb25maWdzL0lEUzgyNDcuaAppbmRleCBjNGZiMDFkLi43MjliMDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvSURTODI0Ny5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9JRFM4MjQ3LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgQ09ORklHX01QQzgyNzJfRkFNSUxZCTEKICNkZWZpbmUgQ09ORklHX0lEUzgyNDcJCTEKICNkZWZpbmUgQ1BVX0lEX1NUUgkJIk1QQzgyNDciCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9JUEhBU0U0NTM5LmggYi9pbmNsdWRlL2NvbmZpZ3MvSVBIQVNFNDUzOS5oCmluZGV4IDZiNzA3OWUuLmMxNTY1ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9JUEhBU0U0NTM5LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0lQSEFTRTQ1MzkuaApAQCAtNDAsNiArNDAsOCBAQAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVICAgKi8KICNkZWZpbmUgQ09ORklHX0lQSEFTRTQ1MzkJMQkvKiAuLi5vbiBhIEludGVycGhhc2UgNDUzOSBQTUMgKi8KIAorI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0lTUEFOLmggYi9pbmNsdWRlL2NvbmZpZ3MvSVNQQU4uaAppbmRleCA4YWExOGNhLi42NTA1NmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvSVNQQU4uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvSVNQQU4uaApAQCAtMzEsNiArMzEsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkJLyogVGhpcyBpcyBhbiBNUEM4MjYwIENQVSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19JU1BBTgkJCS8qIC4uLm9uIG9uZSBvZiBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcyAqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODI2MEFEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzgyNjBBRFMuaAppbmRleCBlZDhmZTZiLi5iYmE0NzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODI2MEFEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4MjYwQURTLmgKQEAgLTQyLDYgKzQyLDggQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MEFEUwkxCS8qIE1vdG9yb2xhIFBRMiBBRFMgZmFtaWx5IGJvYXJkICovCiAKKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLworCiAvKgogICogRmlndXJlIG91dCBpZiB3ZSBhcmUgYm9vdGluZyBsb3cgdmlhIGZsYXNoIEhSQ1cgb3IgaGlnaCB2aWEgdGhlIEJDU1IuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4MjY2QURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODI2NkFEUy5oCmluZGV4IDg5ZjJkMDkuLmQ4ZTkxYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4MjY2QURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzgyNjZBRFMuaApAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkxCS8qIFRoaXMgaXMgYW4gTVBDODI2MCBDUFUJKi8KICNkZWZpbmUgQ09ORklHX01QQzgyNjZBRFMJMQkvKiAuLi5vbiBtb3Rvcm9sYSBBRFMgYm9hcmQJKi8KKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLwogCiAjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YgMQkvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZgkqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODM0OUFEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzgzNDlBRFMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQyZmFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzgzNDlBRFMuaApAQCAtMCwwICsxLDU4NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBtcGM4MzQ5YWRzIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQorICoKKyAqIFBsZWFzZSByZWZlciB0byBkb2MvUkVBRE1FLm1wYzgzeHhhZHMgZm9yIG1vcmUgaW5mby4KKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjdW5kZWYgREVCVUcKKworI2RlZmluZSBDT05GSUdfTUlJCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19FMzAwCQkxCS8qIEUzMDAgRmFtaWx5ICovCisjZGVmaW5lIENPTkZJR19NUEM4M1hYCQkxCS8qIE1QQzgzWFggZmFtaWx5ICovCisjZGVmaW5lIENPTkZJR19NUEM4MzQ5CQkxCS8qIE1QQzgzNDkgc3BlY2lmaWMgKi8KKyNkZWZpbmUgQ09ORklHX01QQzgzNDlBRFMJMQkvKiBNUEM4MzQ5QURTIGJvYXJkIHNwZWNpZmljICovCisKKy8qIEZJWE1FOiBSZWFsIFBDSSBzdXBwb3J0IHdpbGwgY29tZSBpbiBhIGZvbGxvdy11cCB1cGRhdGUuICovCisjdW5kZWYgQ09ORklHX1BDSQorCisjZGVmaW5lIENPTkZJR19UU0VDX0VORVQgCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCovCisKKyN1bmRlZiBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisKKyNkZWZpbmUgUENJXzY2TQorI2lmZGVmIFBDSV82Nk0KKyNkZWZpbmUgQ09ORklHXzgzWFhfQ0xLSU4JNjYwMDAwMDAJLyogaW4gSHogKi8KKyNlbHNlCisjZGVmaW5lIENPTkZJR184M1hYX0NMS0lOCTMzMDAwMDAwCS8qIGluIEh6ICovCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU1lTX0NMS19GUkVRCisjaWZkZWYgUENJXzY2TQorI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTY2MDAwMDAwCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMDAwMDAwCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YJLyogY2FsbCBib2FyZF9wcmVfaW5pdCAqLworCisjZGVmaW5lIENGR19JTU1SQkFSCQkweEUwMDAwMDAwCisKKyN1bmRlZiBDRkdfRFJBTV9URVNUICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSB0ZXN0LCB0YWtlcyB0aW1lICovCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBtZW10ZXN0IHJlZ2lvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQgICAgICAgICAweDAwMTAwMDAwCisKKy8qCisgKiBERFIgU2V0dXAKKyAqLworCisjZGVmaW5lIENGR19ERFJfQkFTRQkweDAwMDAwMDAwCS8qIEREUiBpcyBzeXN0ZW0gbWVtb3J5Ki8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UgQ0ZHX0REUl9CQVNFCisjdW5kZWYgIENPTkZJR19ERFJfMlRfVElNSU5HCisjZGVmaW5lIENGR19ERFJfU0RSQU1fQkFTRSBDRkdfRERSX0JBU0UKKworI2lmIGRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pCisJLyoKKwkgKiBEZXRlcm1pbmUgRERSIGNvbmZpZ3VyYXRpb24gZnJvbSBJMkMgaW50ZXJmYWNlLgorCSAqLworCSNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTCTB4NTEJCS8qIEREUiBESU1NICovCisjZWxzZQorCS8qCisJICogTWFudWFsbHkgc2V0IHVwIEREUiBwYXJhbWV0ZXJzCisJICovCisJI2RlZmluZSBDRkdfRERSX1NJWkUJICAgIDI1NgkJLyogTWIgKi8KKwkjZGVmaW5lIENGR19ERFJfQ09ORklHCShDU0NPTkZJR19FTiB8IENTQ09ORklHX1JPV19CSVRfMTMgfCBDU0NPTkZJR19DT0xfQklUXzkpCisJI2RlZmluZSBDRkdfRERSX1RJTUlOR18xCTB4MzczNDQzMjEKKwkjZGVmaW5lIENGR19ERFJfVElNSU5HXzIJMHgwMDAwMDgwMCAgLyogUDktNDUsbWF5IG5lZWQgdHVuaW5nICovCisJI2RlZmluZSBDRkdfRERSX0NPTlRST0wgCTB4YzIwMDAwMDAgIC8qIHVuYnVmZmVyZWQsbm8gRFlOX1BXUiAqLworCSNkZWZpbmUgQ0ZHX0REUl9NT0RFICAgIAkweDAwMDAwMDYyICAvKiBETEwsbm9ybWFsLHNlcSw0LzIuNSAqLworCSNkZWZpbmUgQ0ZHX0REUl9JTlRFUlZBTAkweDA1MjAwMTAwICAvKiBhdXRvY2hhcmdlLG5vIG9wZW4gcGFnZSAqLworI2VuZGlmCisKKy8qCisgKiBTRFJBTSBvbiB0aGUgTG9jYWwgQnVzCisgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9CQVNFCTB4ZjAwMDAwMDAJLyogTG9jYWxidXMgU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9TSVpFCTY0CQkvKiBMQkMgU0RSQU0gaXMgNjRNQiAqLworCisvKgorICogRkxBU0ggb24gdGhlIExvY2FsIEJ1cworICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkvKiB1c2UgdGhlIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiB1c2UgdGhlIENGSSBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkUwMDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggICAqLworI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJOAkJLyogRkxBU0ggc2l6ZSBpbiBNQiAqLworLyogI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAqLworCisjZGVmaW5lIENGR19CUjBfUFJFTElNCShDRkdfRkxBU0hfQkFTRSB8CS8qIEZsYXNoIEJhc2UgYWRkcmVzcyAqLyBcCisJCQkoMiA8PCBCUl9QU19TSElGVCkgfAkvKiAzMiBiaXQgcG9ydCBzaXplICovCSBcCisJCQlCUl9WKQkJCS8qIHZhbGlkICovCisjZGVmaW5lIENGR19PUjBfUFJFTElNCQkweGZmODA2ZmY3CS8qIDE2TWIgRmxhc2ggc2l6ZSovCisjZGVmaW5lIENGR19MQkxBV0JBUjBfUFJFTElNIENGR19GTEFTSF9CQVNFCS8qIFdpbmRvdyBiYXNlIGF0IGZsYXNoIGJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0xCTEFXQVIwX1BSRUxJTSAgMHg4MDAwMDAxNgkJLyogMTZNYiB3aW5kb3cgc2l6ZSAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkJLyogbnVtYmVyIG9mIGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk2NAkJLyogc2VjdG9ycyBwZXIgZGV2aWNlICovCisKKyN1bmRlZglDRkdfRkxBU0hfQ0hFQ0tTVU0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJNjAwMDAJLyogRmxhc2ggRXJhc2UgVGltZW91dCAobXMpICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBGbGFzaCBXcml0ZSBUaW1lb3V0IChtcykgKi8KKworI2RlZmluZSBDRkdfTUlEX0ZMQVNIX0pVTVAgICAgICAweDdGMDAwMDAwCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisKKyNpZiAoQ0ZHX01PTklUT1JfQkFTRSA8IENGR19GTEFTSF9CQVNFKQorI2RlZmluZSBDRkdfUkFNQk9PVAorI2Vsc2UKKyN1bmRlZiAgQ0ZHX1JBTUJPT1QKKyNlbmRpZgorCisvKgorICogQkNTUiByZWdpc3RlciBvbiBsb2NhbCBidXMgMzJLQiwgOC1iaXQgd2lkZSBmb3IgQURTIGNvbmZpZyByZWcKKyAqLworI2RlZmluZSBDRkdfQkNTUiAgICAgICAgICAgICAweEY4MDAwMDAwCisjZGVmaW5lIENGR19MQkxBV0JBUjFfUFJFTElNIENGR19CQ1NSCS8qIEFjY2VzcyB3aW5kb3cgYmFzZSBhdCBCQ1NSIGJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0xCTEFXQVIxX1BSRUxJTSAgMHg4MDAwMDAwRQkJLyogQWNjZXNzIHdpbmRvdyBzaXplIDMySyAqLworI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkgIChDRkdfQkNTUnwweDAwMDAwODAxKQkvKiBQb3J0LXNpemU9OGJpdCwgTVNFTD1HUENNICovCisjZGVmaW5lIENGR19PUjFfUFJFTElNCQkweEZGRkZFOGYwCS8qIGxlbmd0aCAzMksgKi8KKworI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0xPQ0sgCTEKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHhlNDAxMDAwMCAgIC8qIEluaXRpYWwgUkFNIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORCAgICAJMHgxMDAwCSAgICAgLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0qLworCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFICAJMHgxMDAgICAgIC8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkgICAgCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCSAgICAJKDEyOCAqIDEwMjQpIC8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KKworLyoKKyAqIExvY2FsIEJ1cyBMQ1JSIGFuZCBMQkNSIHJlZ3MKKyAqICAgIExDUlI6ICBETEwgYnlwYXNzLCBDbG9jayBkaXZpZGVyIGlzIDQKKyAqIEV4dGVybmFsIExvY2FsIEJ1cyByYXRlIGlzCisgKiAgICBDTEtJTiAqIEhSQ1dMX0NTQl9UT19DTEtJTiAvIEhSQ1dMX0xDTF9CVVNfVE9fU0NCX0NMSyAvIExDUlJfQ0xLRElWCisgKi8KKyNkZWZpbmUgQ0ZHX0xDUlIJKExDUlJfREJZUCB8IExDUlJfQ0xLRElWXzQpCisjZGVmaW5lIENGR19MQkNfTEJDUgkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0xCX1NEUkFNCS8qIGlmIGJvYXJkIGhhcyBTUkRBTSBvbiBsb2NhbCBidXMgKi8KKworI2lmZGVmIENGR19MQl9TRFJBTQorLypsb2NhbCBidXMgQlIyLCBPUjIgZGVmaW5pdGlvbiBmb3IgU0RSQU0gaWYgc29sZGVyZWQgb24gdGhlIEFEUyBib2FyZCovCisvKgorICogQmFzZSBSZWdpc3RlciAyIGFuZCBPcHRpb24gUmVnaXN0ZXIgMiBjb25maWd1cmUgU0RSQU0uCisgKiBUaGUgU0RSQU0gYmFzZSBhZGRyZXNzLCBDRkdfTEJDX1NEUkFNX0JBU0UsIGlzIDB4ZjAwMDAwMDAuCisgKgorICogRm9yIEJSMiwgbmVlZDoKKyAqICAgIEJhc2UgYWRkcmVzcyBvZiAweGYwMDAwMDAwID0gQlJbMDoxNl0gPSAxMTExIDAwMDAgMDAwMCAwMDAwIDAKKyAqICAgIHBvcnQtc2l6ZSA9IDMyLWJpdHMgPSBCUjJbMTk6MjBdID0gMTEKKyAqICAgIG5vIHBhcml0eSBjaGVja2luZyA9IEJSMlsyMToyMl0gPSAwMAorICogICAgU0RSQU0gZm9yIE1TRUwgPSBCUjJbMjQ6MjZdID0gMDExCisgKiAgICBWYWxpZCA9IEJSWzMxXSA9IDEKKyAqCisgKiAwICAgIDQgICAgOCAgICAxMiAgIDE2ICAgMjAgICAyNCAgIDI4CisgKiAxMTExIDAwMDAgMDAwMCAwMDAwIDAwMDEgMTAwMCAwMTEwIDAwMDEgPSBmMDAwMTg2MQorICoKKyAqIEZJWE1FOiBDRkdfTEJDX1NEUkFNX0JBU0Ugc2hvdWxkIGJlIG1hc2tlZCBhbmQgT1InZWQgaW50bworICogRklYTUU6IHRoZSB0b3AgMTcgYml0cyBvZiBCUjIuCisgKi8KKworI2RlZmluZSBDRkdfQlIyX1BSRUxJTQkJMHhmMDAwMTg2MSAvKlBvcnQtc2l6ZT0zMmJpdCwgTVNFTD1TRFJBTSovCisjZGVmaW5lIENGR19MQkxBV0JBUjJfUFJFTElNCTB4RjAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0xCTEFXQVIyX1BSRUxJTQkweDgwMDAwMDE5IC8qNjRNKi8KKworLyoKKyAqIFRoZSBTRFJBTSBzaXplIGluIE1CLCBDRkdfTEJDX1NEUkFNX1NJWkUsIGlzIDY0LgorICoKKyAqIEZvciBPUjIsIG5lZWQ6CisgKiAgICA2NE1CIG1hc2sgZm9yIEFNLCBPUjJbMDo3XSA9IDExMTEgMTEwMAorICoJCSAgIFhBTSwgT1IyWzE3OjE4XSA9IDExCisgKiAgICA5IGNvbHVtbnMgT1IyWzE5LTIxXSA9IDAxMAorICogICAgMTMgcm93cyAgIE9SMlsyMy0yNV0gPSAxMDAKKyAqICAgIEVBRCBzZXQgZm9yIGV4dHJhIHRpbWUgT1JbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTEwMCAwMDAwIDAwMDAgMDExMCAxMDAxIDAwMDAgMDAwMSA9IGZjMDA2OTAxCisgKi8KKworI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkweGZjMDA2OTAxCisKKyNkZWZpbmUgQ0ZHX0xCQ19MU1JUCTB4MzIwMDAwMDAgICAgLyogTEIgc2RyYW0gcmVmcmVzaCB0aW1lciwgYWJvdXQgNnVzICovCisjZGVmaW5lIENGR19MQkNfTVJUUFIJMHgyMDAwMDAwMCAgICAvKiBMQiByZWZyZXNoIHRpbWVyIHByZXNjYWwsIDI2Nk1Iei8zMiovCisKKy8qCisgKiBMU0RNUiBtYXNrcworICovCisjZGVmaW5lIENGR19MQkNfTFNETVJfUkZFTgkoMSA8PCAoMzEgLSAgMSkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQlNNQTE1MTYJKDMgPDwgKDMxIC0gMTApKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0JTTUExNjE3CSg0IDw8ICgzMSAtIDEwKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9SRkNSNQkoMyA8PCAoMzEgLSAxNikpCisjZGVmaW5lIENGR19MQkNfTFNETVJfUkZDUjgJKDUgPDwgKDMxIC0gMTYpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX1JGQ1IxNgkoNyA8PCAoMzEgLSAxNikpCisjZGVmaW5lIENGR19MQkNfTFNETVJfUFJFVE9BQ1QzCSgzIDw8ICgzMSAtIDE5KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9QUkVUT0FDVDYJKDUgPDwgKDMxIC0gMTkpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX1BSRVRPQUNUNwkoNyA8PCAoMzEgLSAxOSkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQUNUVE9SVzMJKDMgPDwgKDMxIC0gMjIpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0FDVFRPUlc3CSg3IDw8ICgzMSAtIDIyKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9BQ1RUT1JXNgkoNiA8PCAoMzEgLSAyMikpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQkw4CSgxIDw8ICgzMSAtIDIzKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9XUkMyCSgyIDw8ICgzMSAtIDI3KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9XUkMzCSgzIDw8ICgzMSAtIDI3KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9XUkM0CSgwIDw8ICgzMSAtIDI3KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9CVUZDTUQJKDEgPDwgKDMxIC0gMjkpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0NMMwkoMyA8PCAoMzEgLSAzMSkpCisKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9OT1JNQUwJKDAgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfQVJGUlNICSgxIDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX1NSRlJTSAkoMiA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9NUlcJKDMgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfUFJFQ0gJKDQgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfUENIQUxMCSg1IDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX0FDVEJOSwkoNiA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9SV0lOVgkoNyA8PCAoMzEgLSA0KSkKKworI2RlZmluZSBDRkdfTEJDX0xTRE1SX0NPTU1PTiAgICAoIENGR19MQkNfTFNETVJfUkZFTiAgICAgICAgICAgIFwKKwkJCQl8IENGR19MQkNfTFNETVJfQlNNQTE1MTYJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9SRkNSOAkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9QUkVUT0FDVDYJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9BQ1RUT1JXMwlcCisJCQkJfCBDRkdfTEJDX0xTRE1SX0JMOAkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9XUkMzCQlcCisJCQkJfCBDRkdfTEJDX0xTRE1SX0NMMwkJXAorCQkJCSkKKworLyoKKyAqIFNEUkFNIENvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBzZXF1ZW5jZS4KKyAqLworI2RlZmluZSBDRkdfTEJDX0xTRE1SXzEJCSggQ0ZHX0xCQ19MU0RNUl9DT01NT04gXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9PUF9QQ0hBTEwpCisjZGVmaW5lIENGR19MQkNfTFNETVJfMgkJKCBDRkdfTEJDX0xTRE1SX0NPTU1PTiBcCisJCQkJfCBDRkdfTEJDX0xTRE1SX09QX0FSRlJTSCkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl8zCQkoIENGR19MQkNfTFNETVJfQ09NTU9OIFwKKwkJCQl8IENGR19MQkNfTFNETVJfT1BfQVJGUlNIKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SXzQJCSggQ0ZHX0xCQ19MU0RNUl9DT01NT04gXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9PUF9NUlcpCisjZGVmaW5lIENGR19MQkNfTFNETVJfNQkJKCBDRkdfTEJDX0xTRE1SX0NPTU1PTiBcCisJCQkJfCBDRkdfTEJDX0xTRE1SX09QX05PUk1BTCkKKyNlbmRpZgorCisvKgorICogU2VyaWFsIFBvcnQKKyAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgMQorI3VuZGVmCUNPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAorCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLDExNTIwMH0KKworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xICAgICAgICAoQ0ZHX0lNTVJCQVIrMHg0NTAwKQorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yICAgICAgICAoQ0ZHX0lNTVJCQVIrMHg0NjAwKQorCisvKiBVc2UgdGhlIEhVU0ggcGFyc2VyICovCisjZGVmaW5lIENGR19IVVNIX1BBUlNFUgorI2lmZGVmICBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAiPiAiCisjZW5kaWYKKworLyogSTJDICovCisjZGVmaW5lICBDT05GSUdfSEFSRF9JMkMJCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkICovCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTQwMDAwMAkvKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorI2RlZmluZSBDRkdfSTJDX05PUFJPQkVTICAgICAgICB7MHg2OX0JLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19PRkZTRVQgICAgICAweDMwMDAKKyNkZWZpbmUgQ0ZHX0kyQzJfT0ZGU0VUICAgICAgMHgzMTAwCisKKy8qIFRTRUMgKi8KKyNkZWZpbmUgQ0ZHX1RTRUMxX09GRlNFVCAweDI0MDAwCisjZGVmaW5lIENGR19UU0VDMSAoQ0ZHX0lNTVJCQVIrQ0ZHX1RTRUMxX09GRlNFVCkKKyNkZWZpbmUgQ0ZHX1RTRUMyX09GRlNFVCAweDI1MDAwCisjZGVmaW5lIENGR19UU0VDMiAoQ0ZHX0lNTVJCQVIrQ0ZHX1RTRUMyX09GRlNFVCkKKworLyogSU8gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkdfSU9fQ09ORiAoXAorCUlPX0NPTkZfVUFSVCB8XAorCUlPX0NPTkZfVFNFQzEgfFwKKwlJT19DT05GX0lSUTAgfFwKKwlJT19DT05GX0lSUTEgfFwKKwlJT19DT05GX0lSUTIgfFwKKwlJT19DT05GX0lSUTMgfFwKKwlJT19DT05GX0lSUTQgfFwKKwlJT19DT05GX0lSUTUgfFwKKwlJT19DT05GX0lSUTYgfFwKKwlJT19DT05GX0lSUTcgKQorCisvKgorICogR2VuZXJhbCBQQ0kKKyAqIEFkZHJlc3NlcyBhcmUgbWFwcGVkIDEtMS4KKyAqLworI2RlZmluZSBDRkdfUENJMV9NRU1fQkFTRQkweDgwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX01FTV9QSFlTCUNGR19QQ0kxX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0kxX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUENJMV9JT19CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fUEhZUwkweGUyMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1NJWkUJMHgxMDAwMDAwCS8qIDE2TSAqLworCisjZGVmaW5lIENGR19QQ0kyX01FTV9CQVNFCTB4QTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTJfTUVNX1BIWVMJQ0ZHX1BDSTJfTUVNX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSTJfTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCisjZGVmaW5lIENGR19QQ0kyX0lPX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJMl9JT19QSFlTCTB4ZTMwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTJfSU9fU0laRQkweDEwMDAwMDAJLyogMTZNICovCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQorCisjZGVmaW5lIFBDSV9BTExfUENJMQorI2lmIGRlZmluZWQoUENJXzY0QklUKQorI3VuZGVmIFBDSV9BTExfUENJMQorI3VuZGVmIFBDSV9UV09fUENJMQorI3VuZGVmIFBDSV9PTkVfUENJMQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfUENJX1BOUAkgICAgICAgICAgICAgICAJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KKworI3VuZGVmIENPTkZJR19FRVBSTzEwMAorI3VuZGVmIENPTkZJR19UVUxJUAorCisjaWYgIWRlZmluZWQoQ09ORklHX1BDSV9QTlApCisJI2RlZmluZSBQQ0lfRU5FVDBfSU9BRERSCTB4RklYTUUKKwkjZGVmaW5lIFBDSV9FTkVUMF9NRU1BRERSCTB4RklYTUUKKwkjZGVmaW5lIFBDSV9JRFNFTF9OVU1CRVIJMHgwYyAJLyogc2xvdDAtPjMoSURTRUwpPTEyLT4xNSAqLworI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwkJLyogc2hvdyBwY2kgZGV2aWNlcyBvbiBzdGFydHVwICovCisjZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTA1NyAgLyogTW90b3JvbGEgKi8KKworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKKyNpZm5kZWYgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfTkVUX01VTFRJIAkxCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfR01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX01QQzgzWFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODNYWF9UU0VDMV9OQU1FCSJUU0VDMCIKKyNkZWZpbmUgQ09ORklHX01QQzgzWFhfVFNFQzIJMQorI2RlZmluZSBDT05GSUdfTVBDODNYWF9UU0VDMl9OQU1FCSJUU0VDMSIKKyNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKKyNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAorCisvKiBPcHRpb25zIGFyZTogVFNFQ1swLTFdICovCisjZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMwIgorCisjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLworCisvKgorICogRW52aXJvbm1lbnQKKyAqLworI2lmbmRlZiBDRkdfUkFNQk9PVAorCSNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisJI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgMHg0MDAwMCkKKwkjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAJLyogMjU2SyhvbmUgc2VjdG9yKSBmb3IgZW52ICovCisJI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorI2Vsc2UKKwkjZGVmaW5lIENGR19OT19GTEFTSAkJMQkvKiBGbGFzaCBpcyBub3QgdXNhYmxlIG5vdyAqLworCSNkZWZpbmUgQ0ZHX0VOVl9JU19OT1dIRVJFCTEJLyogU3RvcmUgRU5WIGluIG1lbW9yeSBvbmx5ICovCisJI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFIC0gMHgxMDAwKQorCSNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkICovCisjZGVmaW5lIENGR19MT0FEU19CQVVEX0NIQU5HRQkxCS8qIGFsbG93IGJhdWRyYXRlIGNoYW5nZSAqLworCisjaWYgZGVmaW5lZChDRkdfUkFNQk9PVCkKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKChDT05GSUdfQ01EX0RGTAlcCisJCQkJIHwgQ0ZHX0NNRF9QSU5HCQlcCisJCQkJIHwgQ0ZHX0NNRF9QQ0kJCVwKKwkJCQkgfCBDRkdfQ01EX0kyQykJCVwKKwkJCQkmCQkJXAorCQkJCSB+KENGR19DTURfRU5WCQlcCisJCQkJICB8IENGR19DTURfTE9BRFMpKQorI2Vsc2UKKyNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoKENPTkZJR19DTURfREZMCVwKKwkJCQkgfCBDRkdfQ01EX1BJTkcJCVwKKwkJCQkgfCBDRkdfQ01EX0kyQykJCVwKKwkJCQkmCQkJXAorCQkJCSB+KENGR19DTURfRU5WCQlcCisJCQkJICB8IENGR19DTURfTE9BRFMpKQorI2VuZGlmCisjZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKyNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwJCVwKKwkJCQl8IENGR19DTURfUENJCQlcCisJCQkJfCBDRkdfQ01EX1BJTkcJCVwKKwkJCQl8IENGR19DTURfSTJDKQorI2Vsc2UKKyNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwJCVwKKwkJCQl8IENGR19DTURfUElORwkJXAorCQkJCXwgQ0ZHX0NNRF9JMkMgICAgICAgXAorCQkJCXwgQ0ZHX0NNRF9NSUkgICAgICAgXAorCQkJCSkKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkICovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDIwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKwkjZGVmaW5lIENGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNlbHNlCisJI2RlZmluZSBDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDFtcyB0aWNrcyAqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKworLyogQ2FjaGUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkdfRENBQ0hFX1NJWkUJCTMyNzY4CisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKmxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19SQ1dIX1BDSUhPU1QgMHg4MDAwMDAwMCAvKiBQQ0lIT1NUICAqLworCisjZGVmaW5lIENGR19IUkNXX0xPVyAoXAorCUhSQ1dMX0xDTF9CVVNfVE9fU0NCX0NMS18xWDEgfFwKKwlIUkNXTF9ERFJfVE9fU0NCX0NMS18xWDEgfFwKKwlIUkNXTF9DU0JfVE9fQ0xLSU5fNFgxIHxcCisJSFJDV0xfVkNPXzFYMiB8XAorCUhSQ1dMX0NPUkVfVE9fQ1NCXzJYMSkKKworI2lmIGRlZmluZWQoUENJXzY0QklUKQorI2RlZmluZSBDRkdfSFJDV19ISUdIIChcCisJSFJDV0hfUENJX0hPU1QgfFwKKwlIUkNXSF82NF9CSVRfUENJIHxcCisJSFJDV0hfUENJMV9BUkJJVEVSX0VOQUJMRSB8XAorCUhSQ1dIX1BDSTJfQVJCSVRFUl9ESVNBQkxFIHxcCisJSFJDV0hfQ09SRV9FTkFCTEUgfFwKKwlIUkNXSF9GUk9NXzBYMDAwMDAxMDAgfFwKKwlIUkNXSF9CT09UU0VRX0RJU0FCTEUgfFwKKwlIUkNXSF9TV19XQVRDSERPR19ESVNBQkxFIHxcCisJSFJDV0hfUk9NX0xPQ19MT0NBTF8xNkJJVCB8XAorCUhSQ1dIX1RTRUMxTV9JTl9HTUlJIHxcCisJSFJDV0hfVFNFQzJNX0lOX0dNSUkgKQorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0hSQ1dfSElHSCAoXAorCUhSQ1dIX1BDSV9IT1NUIHxcCisJSFJDV0hfMzJfQklUX1BDSSB8XAorCUhSQ1dIX1BDSTFfQVJCSVRFUl9FTkFCTEUgfFwKKwlIUkNXSF9QQ0kyX0FSQklURVJfRU5BQkxFIHxcCisJSFJDV0hfQ09SRV9FTkFCTEUgfFwKKwlIUkNXSF9GUk9NXzBYMDAwMDAxMDAgfFwKKwlIUkNXSF9CT09UU0VRX0RJU0FCTEUgfFwKKwlIUkNXSF9TV19XQVRDSERPR19ESVNBQkxFIHxcCisJSFJDV0hfUk9NX0xPQ19MT0NBTF8xNkJJVCB8XAorCUhSQ1dIX1RTRUMxTV9JTl9HTUlJIHxcCisJSFJDV0hfVFNFQzJNX0lOX0dNSUkgKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0hJRDBfSU5JVCAweDAwMDAwMDAwMAorCisjZGVmaW5lIENGR19ISUQwX0ZJTkFMIENGR19ISUQwX0lOSVQKKworLyogI2RlZmluZSBDRkdfSElEMF9GSU5BTAkJKFwKKwlISUQwX0VOQUJMRV9JTlNUUlVDVElPTl9DQUNIRSB8XAorCUhJRDBfRU5BQkxFX01fQklUIHxcCisJSElEMF9FTkFCTEVfQUREUkVTU19CUk9BRENBU1QgKSAqLworCisjZGVmaW5lIENGR19ISUQyIDB4MDAwMDAwMDAwCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMjMwNDAwCS8qIHNwZWVkIG9mIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoKKyAqIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorI2RlZmluZSBDT05GSUdfRVRIQUREUiAgIDAwOjA0OjlmOjExOjIyOjMzCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorI2RlZmluZSBDT05GSUdfRVRIMUFERFIgIDAwOkUwOjBDOjAwOjdEOjAxCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfSVBBRERSICAgIDE5Mi4xNjguMS4yNTMKKworI2RlZmluZSBDT05GSUdfSE9TVE5BTUUJIHVua25vd24KKyNkZWZpbmUgQ09ORklHX1JPT1RQQVRICSAvbmZzcm9vdAorI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJIHlvdXIudUltYWdlCisKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQICAxOTIuMTY4LjEuMQorI2RlZmluZSBDT05GSUdfR0FURVdBWUlQIDE5Mi4xNjguMS4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLICAgMjU1LjI1NS4yNTUuMAorCisjZGVmaW5lIENPTkZJR19MT0FEQUREUiAgMjAwMDAwCS8qIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRmdHAgYW5kIGJvb3RtICovCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSA2CS8qIC0xIGRpc2FibGVzIGF1dG8tYm9vdCAqLworI3VuZGVmICBDT05GSUdfQk9PVEFSR1MJCS8qIHRoZSBib290IGNvbW1hbmQgd2lsbCBzZXQgYm9vdGFyZ3MgKi8KKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJIDExNTIwMAorCisKKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCVwKKwkiY29uc29sZWRldj10dHlTMFwwIgkJCQlcCisJInJhbWRpc2thZGRyPTQwMDAwMFwwIgkJCQlcCisJInJhbWRpc2tmaWxlPXJhbWZzLjgzeHhcMCIKKworI2RlZmluZSBDT05GSUdfTkZTQk9PVENPTU1BTkQJCQkJXAorCSJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQlcCisJIm5mc3Jvb3Q9JHNlcnZlcmlwOiRyb290cGF0aCAiCQkJXAorCSJpcD0kaXBhZGRyOiRzZXJ2ZXJpcDokZ2F0ZXdheWlwOiRuZXRtYXNrOiRob3N0bmFtZTokbmV0ZGV2Om9mZiAiIFwKKwkiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIJXAorCSJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJCVwKKwkiYm9vdG0gJGxvYWRhZGRyIgorCisjZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORAkJCQlcCisJInNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIJCVwKKwkiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIJXAorCSJ0ZnRwICRyYW1kaXNrYWRkciAkcmFtZGlza2ZpbGU7IgkJXAorCSJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJCVwKKwkiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciIKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgQ09ORklHX05GU0JPT1RDT01NQU5ECisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEFEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaAppbmRleCAxYzExYzZmLi4xMzFjODMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEFEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmgKQEAgLTQxLDE0ICs0MSwyMCBAQAogI2RlZmluZSBDT05GSUdfTVBDODU0MAkJMQkvKiBNUEM4NTQwIHNwZWNpZmljICovCiAjZGVmaW5lIENPTkZJR19NUEM4NTQwQURTCTEJLyogTVBDODU0MEFEUyBib2FyZCBzcGVjaWZpYyAqLwogCisjaWZuZGVmIENPTkZJR19IQVNfRkVDCisjZGVmaW5lIENPTkZJR19IQVNfRkVDCQkxCS8qIDg1NDAgaGFzIEZFQyAqLworI2VuZGlmCisKICNkZWZpbmUgQ09ORklHX1BDSQogI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUIAkJLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICovCiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCiAjZGVmaW5lIENPTkZJR19TUERfRUVQUk9NCQkvKiBVc2UgU1BEIEVFUFJPTSBmb3IgRERSIHNldHVwKi8KLSNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLwogI2RlZmluZSBDT05GSUdfRERSX0RMTAkJCS8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkICovCiAjZGVmaW5lIENPTkZJR19ERFJfMlRfVElNSU5HCQkvKiBTZXRzIHRoZSAyVCB0aW1pbmcgYml0ICovCiAKKyNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLworI2RlZmluZSBDT05GSUdfTUVNX0lOSVRfVkFMVUUJCTB4RGVhZEJlZWYKKwogCiAvKgogICogc3lzY2xrIGZvciBNUEM4NXh4CkBAIC0zMzgsMTcgKzM0NCwyNCBAQAogCiAjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzFfTkFNRQkiVFNFQzAiCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiVFNFQzEiCiAjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkwCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkxCiAjZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAogI2RlZmluZSBUU0VDMl9QSFlJRFgJCTAKIAorCisjaWYgQ09ORklHX0hBU19GRUMKICNkZWZpbmUgQ09ORklHX01QQzg1WFhfRkVDCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfRkVDX05BTUUJCSJGRUMiCiAjZGVmaW5lIEZFQ19QSFlfQUREUgkJMwogI2RlZmluZSBGRUNfUEhZSURYCQkwCisjZW5kaWYKIAotI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJNT1RPIEVORVQwIgorLyogT3B0aW9ucyBhcmU6IFRTRUNbMC0xXSwgRkVDICovCisjZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMwIgogCiAjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEVWQUwuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwRVZBTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjkyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEVWQUwuaApAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwyMDAzIE1vdG9yb2xhLEluYy4KKyAqIE1vZGlmaWVkIGJ5IEx1bnNoZW5nIFdhbmcsIGx1bnNoZW5nQHNvaHUuY29tCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogbXBjODU0MGV2YWwgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlICovCisvKiBwbGVhc2UgcmVmZXIgdG8gZG9jL1JFQURNRS5tcGM4NXh4YWRzIGZvciBtb3JlIGluZm8gKi8KKy8qIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIHRoZSBNQUMgYWRkcmVzcyBhbmQgb3RoZXIgbmV0d29yayBwYXJhbXMgZmlyc3QsCisgKiBzZWFyY2ggZm9yIENPTkZJR19FVEhBRERSLENPTkZJR19TRVJWRVJJUCxldGMgaW4gdGhpcyBmaWxlCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKy8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCisjZGVmaW5lIENPTkZJR19CT09LRQkJMQkgICAgLyogQk9PS0UgCQkJKi8KKyNkZWZpbmUgQ09ORklHX0U1MDAJCTEJICAgIC8qIEJPT0tFIGU1MDAgZmFtaWx5CSovCisjZGVmaW5lIENPTkZJR19NUEM4NXh4CQkxCSAgICAvKiBNUEM4NTQwL01QQzg1NjAJCSovCisjZGVmaW5lIENPTkZJR19NUEM4NTQwCQkxCSAgICAvKiBNUEM4NTQwIHNwZWNpZmljCSAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1NDBFVkFMCTEJICAgIC8qIE1QQzg1NDBFVkFMIGJvYXJkIHNwZWNpZmljICovCisKKyN1bmRlZiAgQ09ORklHX1BDSQkgICAgICAgICAJICAgIC8qIHBjaSBldGhlcm5ldCBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19UU0VDX0VORVQgCQkgICAgLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTSAgICAgICAgICAgICAgICAgICAvKiBVc2UgU1BEIEVFUFJPTSBmb3IgRERSIHNldHVwICovCisjdW5kZWYgIENPTkZJR19ERFJfRUNDCQkJICAgIC8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19ERFJfRExMICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkICovCisKKy8qIFVzaW5nIExvY2FsYnVzIFNEUkFNIHRvIGVtdWxhdGUgZmxhc2ggYmVmb3JlIHdlIGNhbiBwcm9ncmFtIHRoZSBmbGFzaCwKKyAqIG5vcm1hbGx5IHlvdSBvbmx5IG5lZWQgYSBmbGFzaC1ib290IGltYWdlKHUtYm9vdC5iaW4pLGlmIHVuc3VyZSB1bmRlZiB0aGlzLgorICogTm90IGF2YWlsYWJlIGZvciBFVkFMIGJvYXJkCisgKi8KKyN1bmRlZiBDT05GSUdfUkFNX0FTX0ZMQVNICisKKy8qIHN5c2NsayBmb3IgTVBDODU0MEVWQUwgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TWVNDTEtfNjZNKQorCS8qCisJICogdGhlIG9zY2lsbGF0b3Igb24gYm9hcmQgaXMgNjZNaHoKKwkgKiBjYW4gYWxzbyBnZXQgNjZNIGNsb2NrIGZyb20gZXh0ZXJuYWwgUENJCisJICovCisJI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRICAgNjYwMDAwMDAKKyNlbHNlCisJI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRICAgMzMwMDAwMDAgICAvKiBtb3N0IHBjaSBjYXJkcyBhcmUgMzNNaHogKi8KKyNlbmRpZgorCisvKiBiZWxvdyBjYW4gYmUgdG9nZ2xlZCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqLworI2RlZmluZSBDT05GSUdfTDJfQ0FDSEUJCSAgICAJICAgIC8qIHRvZ2dsZSBMMiBjYWNoZSAJKi8KKyN1bmRlZiAgQ09ORklHX0JUQgkJCSAgICAvKiB0b2dnbGUgYnJhbmNoIHByZWRpdGlvbiAqLworI3VuZGVmICBDT05GSUdfQUREUl9TVFJFQU1JTkcJCSAgICAvKiB0b2dnbGUgYWRkciBzdHJlYW1pbmcgICAqLworCisjZGVmaW5lIENPTkZJR19CT0FSRF9QUkVfSU5JVAkxCSAgICAvKiBDYWxsIGJvYXJkX3ByZV9pbml0CSovCisKKyN1bmRlZglDRkdfRFJBTV9URVNUCQkJICAgIC8qIG1lbW9yeSB0ZXN0LCB0YWtlcyB0aW1lICAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMjAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAwNDAwMDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKKyNlcnJvciAiWW91IGNhbiBvbmx5IHVzZSBlaXRoZXIgUENJIEV0aGVybmV0IENhcmQgb3IgVFNFQyBFdGhlcm5ldCwgbm90IGJvdGguIgorI2VuZGlmCisKKy8qCisgKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQorICogYWN0dWFsIHJlc291cmNlcyBnZXQgbWFwcGVkIChub3QgcGh5c2ljYWwgYWRkcmVzc2VzKQorICovCisjZGVmaW5lIENGR19DQ1NSQkFSX0RFRkFVTFQgCTB4ZmY3MDAwMDAJLyogQ0NTUkJBUiBEZWZhdWx0CSovCisjZGVmaW5lIENGR19DQ1NSQkFSCQkweGUwMDAwMDAwCS8qIHJlbG9jYXRlZCBDQ1NSQkFSIAkqLworI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX0NDU1JCQVIJLyogUFFJSSB1c2VzIENGR19JTU1SCSovCisKKyNkZWZpbmUgQ0ZHX0REUl9TRFJBTV9CQVNFCTB4MDAwMDAwMDAJLyogRERSIGlzIHN5c3RlbSBtZW1vcnkgICovCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQlDRkdfRERSX1NEUkFNX0JBU0UKKyNkZWZpbmUgQ0ZHX1NEUkFNX1NJWkUJCTI1NiAgICAgICAgICAgICAvKiBERFIgaXMgbm93IDI1Nk1CICAgICAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUkFNX0FTX0ZMQVNIKQorI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmYzAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTSAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9CQVNFICAgICAgMHhmMDAwMDAwMCAgICAgIC8qIExvY2FsYnVzIFNEUkFNICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9TSVpFCTY0CQkvKiBMQkMgU0RSQU0gaXMgME1CCSovCisKKyNpZiBkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCisjZGVmaW5lIENGR19GTEFTSF9CQVNFICAgICAgICAgIDB4ZjgwMDAwMDAgICAgICAvKiBzdGFydCBvZiBGTEFTSCAgMTZNICAqLworI2RlZmluZSBDRkdfQlIwX1BSRUxJTSAgICAgICAgICAweGY4MDAxODAxICAgICAgLyogcG9ydCBzaXplIDMyYml0ICovCisjZWxzZSAvKiBCb290IGZyb20gcmVhbCBGbGFzaCAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHhmZjgwMDAwMAkvKiBzdGFydCBvZiBGTEFTSCA4TSAgICAqLworI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZjgwMTAwMQkvKiBwb3J0IHNpemUgMTZiaXQJKi8KKyNlbmRpZgorCisjZGVmaW5lCUNGR19PUjBfUFJFTElNCQkweGZmODA2ZjY3CS8qIDhNQiBGbGFzaAkJKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCQkvKiBudW1iZXIgb2YgYmFua3MJKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTY0CQkvKiBzZWN0b3JzIHBlciBkZXZpY2UgICAqLworI3VuZGVmCUNGR19GTEFTSF9DSEVDS1NVTQorI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAk2MDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAJVEVYVF9CQVNFCS8qIHN0YXJ0IG9mIG1vbml0b3IgKi8KKworI2lmIChDRkdfTU9OSVRPUl9CQVNFIDwgQ0ZHX0ZMQVNIX0JBU0UpCisjZGVmaW5lIENGR19SQU1CT09UCisjZWxzZQorI3VuZGVmICBDRkdfUkFNQk9PVAorI2VuZGlmCisKKyNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTCTB4NTEJCS8qIEREUiBESU1NICovCisKKy8qIEhlcmUgc29tZSBERFIgc2V0dGluZyBzaG91bGQgYmUgYWRkZWQgKi8KKworCisjdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKKworLyogbG9jYWwgYnVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIENGR19CUjJfUFJFTElNCQkweGYwMDAxODYxCS8qIDY0TUIgbG9jYWxidXMgU0RSQU0gICovCisjZGVmaW5lIENGR19PUjJfUFJFTElNCQkweGZjMDA2OTAxCisjZGVmaW5lIENGR19MQkNfTENSUgkJMHgwMDAzMDAwNAkvKiBsb2NhbCBidXMgZnJlcSBkaXZpZGVyKi8KKyNkZWZpbmUgQ0ZHX0xCQ19MQkNSCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19MQkNfTFNSVAkJMHgyMDAwMDAwMAorI2RlZmluZSBDRkdfTEJDX01SVFBSCQkweDIwMDAwMDAwCisjZGVmaW5lIENGR19MQkNfTFNETVJfMQkJMHgyODYxYjcyMworI2RlZmluZSBDRkdfTEJDX0xTRE1SXzIJCTB4MDg2MWI3MjMKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl8zCQkweDA4NjFiNzIzCisjZGVmaW5lIENGR19MQkNfTFNETVJfNAkJMHgxODYxYjcyMworI2RlZmluZSBDRkdfTEJDX0xTRE1SXzUJCTB4NDA2MWI3MjMKKworI2lmIGRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkKKyNkZWZpbmUgQ0ZHX0JSNF9QUkVMSU0gICAgICAgICAgMHhmODAwMDgwMSAgICAgIC8qIDMyS0IsIDgtYml0IHdpZGUgZm9yIEFEUyBjb25maWcgcmVnICovCisjZWxzZQorI2RlZmluZSBDRkdfQlI0X1BSRUxJTSAgICAgICAgICAweGY4MDAwODAxICAgICAgLyogMzJLQiwgOC1iaXQgd2lkZSBmb3IgQURTIGNvbmZpZyByZWcgKi8KKyNlbmRpZgorI2RlZmluZSBDRkdfT1I0X1BSRUxJTSAgICAgICAgICAweGZmZmZlMWYxCisjZGVmaW5lIENGR19CQ1NSICAgICAgICAgICAgICAgIChDRkdfQlI0X1BSRUxJTSAmIDB4ZmZmZjgwMDApCisKKyNkZWZpbmUgQ09ORklHX0wxX0lOSVRfUkFNCisjZGVmaW5lIENGR19JTklUX1JBTV9MT0NLIAkxCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSICAgCTB4NDAwMDAwMDAgCS8qIEluaXRpYWwgUkFNIGFkZHJlc3MJKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORCAgICAJMHg0MDAwCSAgICAJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0gKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgCTEyOAkJLyogbnVtIGJ5dGVzIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSAgICAJKDI1NiAqIDEwMjQpICAgIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24gKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JICAgIAkoMTI4ICogMTAyNCkgICAgLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLworCisvKiBTZXJpYWwgUG9ydCAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgMQorI3VuZGVmCUNPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJIAkxMTUyMDAKKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgIFwKKwl7MzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwxMTUyMDB9CisKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgKENGR19DQ1NSQkFSKzB4NDUwMCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMiAgICAgICAgKENGR19DQ1NSQkFSKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNpZmRlZiAgQ0ZHX0hVU0hfUEFSU0VSCisjZGVmaW5lIENGR19QUk9NUFRfSFVTSF9QUzIgIj4gIgorI2VuZGlmCisKKy8qIEkyQyAqLworI2RlZmluZSAgQ09ORklHX0hBUkRfSTJDCQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0Ki8KKyN1bmRlZglDT05GSUdfU09GVF9JMkMJCQkvKiBJMkMgYml0LWJhbmdlZAkJKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcwkqLworI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCisjZGVmaW5lIENGR19JMkNfTk9QUk9CRVMgICAgICAgIHsweDY5fQkvKiBEb24ndCBwcm9iZSB0aGVzZSBhZGRycyAqLworCisvKiBHZW5lcmFsIFBDSSAqLworI2RlZmluZSBDRkdfUENJX01FTV9CQVNFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1fUEhZUwkweDgwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfTUVNX1NJWkUJMHgyMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX0lPX0JBU0UgICAgICAgICAweGUyMDAwMDAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkKKyN1bmRlZiBDT05GSUdfRUVQUk8xMDAKKyNkZWZpbmUgQ09ORklHX1RVTElQCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCSAgICAgICAgICAgICAgIAkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLworI2lmICFkZWZpbmVkKENPTkZJR19QQ0lfUE5QKQorI2RlZmluZSBQQ0lfRU5FVDBfSU9BRERSICAgICAgMHhlMDAwMDAwMAorI2RlZmluZSBQQ0lfRU5FVDBfTUVNQUREUiAgICAgMHhlMDAwMDAwMAorI2RlZmluZSBQQ0lfSURTRUxfTlVNQkVSICAgICAgMHgwYyAJLypzbG90MC0+MyhJRFNFTCk9MTItPjE1Ki8KKyNlbmRpZgorI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAxICAgICAgIC8qIHNob3cgcGNpIGRldmljZXMgb24gc3RhcnR1cCAgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfVkVORE9SSUQgMHgxMDU3ICAvKiBNb3Rvcm9sYSAqLworI2RlZmluZSBDRkdfUENJX1NVQlNZU19ERVZJQ0VJRCAweDAwMDgKKyNlbGlmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAJMQorI2RlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkqLworI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMSAgICAxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxX05BTUUgICAgICAiVFNFQzAiCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRSAgICAgICJUU0VDMSIKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfRkVDICAgICAgMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9GRUNfTkFNRSAgICAgICAgICAgICAgICAiRkVDIgorI2RlZmluZSBUU0VDMV9QSFlfQUREUiAgICAgICAgICA3CisjZGVmaW5lCVRTRUMyX1BIWV9BRERSCQk0CisjZGVmaW5lIEZFQ19QSFlfQUREUiAgICAgICAgICAgIDIKKyNkZWZpbmUgVFNFQzFfUEhZSURYICAgICAgICAgICAgMAorI2RlZmluZSBUU0VDMl9QSFlJRFggICAgICAgICAgICAwCisjZGVmaW5lIEZFQ19QSFlJRFggICAgICAgICAgICAgIDAKKy8qIE9wdGlvbnMgYXJlOiBUU0VDWzAtMV0sIEZFQyAqLworI2RlZmluZSBDT05GSUdfRVRIUFJJTUUgICAgICAgICAgICAgICAgIlRTRUMwIgorCisjZGVmaW5lIENPTkZJR19QSFlfTTg4RTEwMTEgICAgIDEgICAgICAgLyogR2lnYUJpdCBFdGhlciBQSFkgICAgKi8KKyNkZWZpbmUgSU5URUxfTFhUOTcxX1BIWQkxCisjZW5kaWYKKworI3VuZGVmIERFQlVHCisKKy8qIEVudmlyb25tZW50ICovCisjaWZuZGVmIENGR19SQU1CT09UCisjaWYgZGVmaW5lZChDT05GSUdfUkFNX0FTX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0lTX05PV0hFUkUKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDEwMDAwMCkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgMHg0MDAwMCkKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMAkvKiAyNTZLKG9uZSBzZWN0b3IpIGZvciBlbnYgKi8KKyNlbmRpZgorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorI2Vsc2UKKy8qICNkZWZpbmUgQ0ZHX05PX0ZMQVNICQkxICovCS8qIEZsYXNoIGlzIG5vdCB1c2FibGUgbm93CSovCisjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCS8qIFN0b3JlIEVOViBpbiBtZW1vcnkgb25seQkqLworI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFIC0gMHgxMDAwKQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJyb290PS9kZXYvcmFtIHJ3IGNvbnNvbGU9dHR5UzAsMTE1MjAwIgorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4ZmY4MDAwMDAgMHhmZmEwMDAwMCIKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzIAkvKiAtMSBkaXNhYmxlIGF1dG9ib290ICovCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCisKKyNpZiBkZWZpbmVkKENGR19SQU1CT09UKSB8fCBkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQorI2RlZmluZSAgQ09ORklHX0NPTU1BTkRTCSgoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX1BJTkcgXAorCQkJCXwgQ0ZHX0NNRF9QQ0kgfCBDRkdfQ01EX0kyQyApICYgXAorCQkJCSB+KENGR19DTURfRU5WIHwgQ0ZHX0NNRF9MT0FEUyApKQorI2Vsc2UKKyNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QSU5HIFwKKwkJCQl8IENGR19DTURfSTJDICkgJiBcCisJCQkJIH4oQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX0xPQURTICkpCisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQorI2RlZmluZSAgQ09ORklHX0NPTU1BTkRTCShDT05GSUdfQ01EX0RGTCB8IENGR19DTURfUENJIFwKKwkJCQl8IENGR19DTURfUElORyB8IENGR19DTURfSTJDICkKKyNlbHNlCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9JMkMgKQorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19MT0FEX0FERFIgICAweDIwMDAwMDAgICAgICAgLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiTVBDODU0MEVWQUw9PiAiLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkoOCA8PCAyMCkgCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KKworLyogQ2FjaGUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkdfRENBQ0hFX1NJWkUJMzI3NjgKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlICovCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCSovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhlIG1hYyBhZGRyZXNzZXMgZm9yIGFsbCBldGhlcm5ldCBpbnRlcmZhY2UgKi8KKy8qIE5PVEU6IGNoYW5nZSBiZWxvdyBmb3IgeW91ciBuZXR3b3JrIHNldHRpbmchISEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCisjZGVmaW5lIENPTkZJR19FVEhBRERSICAwMDowMTphZjowNzo5Yjo4YQorI2RlZmluZSBDT05GSUdfRVRIMUFERFIgIDAwOjAxOmFmOjA3OjliOjhiCisjZGVmaW5lIENPTkZJR19FVEgyQUREUiAgMDA6MDE6YWY6MDc6OWI6OGMKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19ST09UUEFUSCAgL25mc3Jvb3QKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFICB5b3VyLnVJbWFnZQorCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgIDE5Mi4xNjguMTAxLjEKKyNkZWZpbmUgQ09ORklHX0lQQUREUiAgICAgICAgICAgMTkyLjE2OC4xMDEuMTEKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUCAgICAgICAgMTkyLjE2OC4xMDEuMAorI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAyNTUuMjU1LjI1NS4wCisKKyNkZWZpbmUgQ09ORklHX0xPQURBRERSICAyMDAwMDAgICAvKiBkZWZhdWx0IGxvY2F0aW9uIGZvciB0ZnRwIGFuZCBib290bSAqLworCisjZGVmaW5lIENPTkZJR19IT1NUTkFNRSAgICAgICAgIE1QQzg1NDBFVkFMCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MUNEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaAppbmRleCAzZGQ0OTU3Li5jOTZiOThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MUNEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgQ09ORklHX0JPT0tFCQkxCS8qIEJPT0tFICovCiAjZGVmaW5lIENPTkZJR19FNTAwCQkxCS8qIEJPT0tFIGU1MDAgZmFtaWx5ICovCiAjZGVmaW5lIENPTkZJR19NUEM4NXh4CQkxCS8qIE1QQzg1NDAvNjAvNTUvNDEgKi8KKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogaGFzIENQTTIgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1NDEJCTEJLyogTVBDODU0MSBzcGVjaWZpYyAqLwogI2RlZmluZSBDT05GSUdfTVBDODU0MUNEUwkxCS8qIE1QQzg1NDFDRFMgYm9hcmQgc3BlY2lmaWMgKi8KIApAQCAtNDAsOSArNDEsMTIgQEAKICNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVCAJCS8qIHRzZWMgZXRoZXJuZXQgc3VwcG9ydCAqLwogI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQogI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCovCi0jZGVmaW5lIENPTkZJR19ERFJfRUNDCQkJLyogb25seSBmb3IgRUNDIEREUiBtb2R1bGUgKi8KICNkZWZpbmUgQ09ORklHX0REUl9ETEwJCQkvKiBwb3NzaWJsZSBETEwgZml4IG5lZWRlZCAqLwotI2RlZmluZSBDT05GSUdfRERSXzJUX1RJTUlORwkJLyogU2V0cyB0aGUgMlQgdGltaW5nIGJpdCAqLworI3VuZGVmIENPTkZJR19ERFJfMlRfVElNSU5HCQkvKiBTZXRzIHRoZSAyVCB0aW1pbmcgYml0ICovCisKKyNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLworI2RlZmluZSBDT05GSUdfTUVNX0lOSVRfVkFMVUUJCTB4RGVhZEJlZWYKKwogCiAvKgogICogV2hlbiBpbml0aWFsaXppbmcgZmxhc2gsIGlmIHdlIGNhbm5vdCBmaW5kIHRoZSBtYW51ZmFjdHVyZXIgSUQsCkBAIC05NCwxOCArOTgsNTAgQEAKICNlcnJvciAoIkNPTkZJR19TUERfRUVQUk9NIGlzIHJlcXVpcmVkIGJ5IE1QQzg1NTU1Q0RTIikKICNlbmRpZgogCisjdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKKworCiAvKgotICogU0RSQU0gb24gdGhlIExvY2FsIEJ1cworICogTG9jYWwgQnVzIERlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9CQVNFCTB4ZjAwMDAwMDAJLyogTG9jYWxidXMgU0RSQU0gKi8KLSNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9TSVpFCTY0CQkvKiBMQkMgU0RSQU0gaXMgNjRNQiAqLworCisvKgorICogRkxBU0ggb24gdGhlIExvY2FsIEJ1cworICogVHdvIGJhbmtzLCA4TSBlYWNoLCB1c2luZyB0aGUgQ0ZJIGRyaXZlci4KKyAqIEJvb3QgZnJvbSBCUjAvT1IwIGJhbmsgYXQgMHhmZjAwXzAwMDAKKyAqIEFsdGVybmF0ZSBCUjEvT1IxIGJhbmsgYXQgMHhmZjgwXzAwMDAKKyAqCisgKiBCUjAsIEJSMToKKyAqICAgIEJhc2UgYWRkcmVzcyAwID0gMHhmZjAwXzAwMDAgPSBCUjBbMDoxNl0gPSAxMTExIDExMTEgMDAwMCAwMDAwIDAKKyAqICAgIEJhc2UgYWRkcmVzcyAxID0gMHhmZjgwXzAwMDAgPSBCUjFbMDoxNl0gPSAxMTExIDExMTEgMTAwMCAwMDAwIDAKKyAqICAgIFBvcnQgU2l6ZSA9IDE2IGJpdHMgPSBCUnhbMTk6MjBdID0gMTAKKyAqICAgIFVzZSBHUENNID0gQlJ4WzI0OjI2XSA9IDAwMAorICogICAgVmFsaWQgPSBCUnhbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTExMSAxMDAwIDAwMDAgMDAwMSAwMDAwIDAwMDAgMDAwMSA9IGZmODAxMDAxICAgIEJSMAorICogMTExMSAxMTExIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMCAwMDAxID0gZmYwMDEwMDEgICAgQlIxCisgKgorICogT1IwLCBPUjE6CisgKiAgICBBZGRyIE1hc2sgPSA4TSA9IE9SeFswOjE2XSA9IDExMTEgMTExMSAxMDAwIDAwMDAgMAorICogICAgUmVzZXJ2ZWQgT1J4WzE3OjE4XSA9IDExLCBjb25mdXNpb24gaGVyZT8KKyAqICAgIENTTlQgPSBPUnhbMjBdID0gMQorICogICAgQUNTID0gaGFsZiBjeWNsZSBkZWxheSA9IE9SeFsyMToyMl0gPSAxMQorICogICAgU0NZID0gNiA9IE9SeFsyNDoyN10gPSAwMTEwCisgKiAgICBUUkxYID0gdXNlIHJlbGF4ZWQgdGltaW5nID0gT1J4WzI5XSA9IDEKKyAqICAgIEVBRCA9IHVzZSBleHRlcm5hbCBhZGRyZXNzIGxhdGNoIGRlbGF5ID0gT1JbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTExMSAxMDAwIDAwMDAgMDExMCAxMTEwIDAxMTAgMDEwMSA9IGZmODA2ZTY1ICAgIE9SeAorICovCisKICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmYwMDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggOE0gKi8KIAotI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZjgwMTAwMQkvKiBwb3J0IHNpemUgMTZiaXQgKi8KLSNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0JCTB4ZmYwMDEwMDEJLyogcG9ydCBzaXplIDE2Yml0ICovCisjZGVmaW5lIENGR19CUjBfUFJFTElNCQkweGZmODAxMDAxCisjZGVmaW5lIENGR19CUjFfUFJFTElNCQkweGZmMDAxMDAxCiAKLSNkZWZpbmUJQ0ZHX09SMF9QUkVMSU0JCTB4ZmY4MDZlNjEJLyogOE1CIEZsYXNoICovCi0jZGVmaW5lCUNGR19PUjFfUFJFTElNCQkweGZmODA2ZTYxCS8qIDhNQiBGbGFzaCAqLworI2RlZmluZQlDRkdfT1IwX1BSRUxJTQkJMHhmZjgwNmU2NQorI2RlZmluZQlDRkdfT1IxX1BSRUxJTQkJMHhmZjgwNmU2NQogCiAjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsweGZmODAwMDAwLCBDRkdfRkxBU0hfQkFTRX0KICNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCQkvKiBudW1iZXIgb2YgYmFua3MgKi8KQEAgLTEyMCwxMSArMTU2LDEyIEBACiAjZGVmaW5lIENGR19GTEFTSF9DRkkKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KIAotI3VuZGVmIENPTkZJR19DTE9DS1NfSU5fTUhaCiAKIC8qCi0gKiBMb2NhbCBCdXMgRGVmaW5pdGlvbnMKKyAqIFNEUkFNIG9uIHRoZSBMb2NhbCBCdXMKICAqLworI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmMDAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTSAqLworI2RlZmluZSBDRkdfTEJDX1NEUkFNX1NJWkUJNjQJCS8qIExCQyBTRFJBTSBpcyA2NE1CICovCiAKIC8qCiAgKiBCYXNlIFJlZ2lzdGVyIDIgYW5kIE9wdGlvbiBSZWdpc3RlciAyIGNvbmZpZ3VyZSBTRFJBTS4KQEAgLTMyNiw3ICszNjMsOSBAQAogCiAjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzFfTkFNRQkiVFNFQzAiCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiVFNFQzEiCiAjdW5kZWYgQ09ORklHX01QQzg1WFhfRkVDCiAjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkwCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkxCkBAIC0zMzQsNyArMzczLDkgQEAKICNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCiAjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAogI2RlZmluZSBGRUNfUEhZSURYCQkwCi0jZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIk1PVE8gRU5FVDAiCisKKy8qIE9wdGlvbnMgYXJlOiBUU0VDWzAtMV0gKi8KKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiVFNFQzAiCiAKICNlbmRpZgkvKiBDT05GSUdfVFNFQ19FTkVUICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYThiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCkBAIC0wLDAgKzEsNTIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIG1wYzg1NDhjZHMgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlCisgKgorICogUGxlYXNlIHJlZmVyIHRvIGRvYy9SRUFETUUubXBjODV4eGNkcyBmb3IgbW9yZSBpbmZvLgorICoKKyAqLworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgKi8KKyNkZWZpbmUgQ09ORklHX0JPT0tFCQkxCS8qIEJPT0tFICovCisjZGVmaW5lIENPTkZJR19FNTAwCQkxCS8qIEJPT0tFIGU1MDAgZmFtaWx5ICovCisjZGVmaW5lIENPTkZJR19NUEM4NXh4CQkxCS8qIE1QQzg1NDAvNjAvNTUvNDEvNDggKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1NDgJCTEJLyogTVBDODU0OCBzcGVjaWZpYyAqLworI2RlZmluZSBDT05GSUdfTVBDODU0OENEUwkxCS8qIE1QQzg1NDhDRFMgYm9hcmQgc3BlY2lmaWMgKi8KKworI3VuZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVCAJCS8qIHRzZWMgZXRoZXJuZXQgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCovCisjZGVmaW5lIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQgKi8KKyNkZWZpbmUgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KKworI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUgkvKiBERFIgY29udHJvbGxlciBvciBETUE/ICovCisjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhEZWFkQmVlZgorCisKKy8qCisgKiBXaGVuIGluaXRpYWxpemluZyBmbGFzaCwgaWYgd2UgY2Fubm90IGZpbmQgdGhlIG1hbnVmYWN0dXJlciBJRCwKKyAqIGFzc3VtZSB0aGlzIGlzIHRoZSBBTUQgZmxhc2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBDRFMgYm9hcmQuCisgKiBUaGlzIGFsbG93cyBib290aW5nIGZyb20gYSBwcm9tamV0LgorICovCisjZGVmaW5lIENPTkZJR19BU1NVTUVfQU1EX0ZMQVNICisKKyNkZWZpbmUgTVBDODV4eF9ERFJfU0RSQU1fQ0xLX0NOVEwJLyogODV4eCBoYXMgY2xvY2sgY29udHJvbCByZWcgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9jbG9ja19mcmVxKHZvaWQpOworI2VuZGlmCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJZ2V0X2Nsb2NrX2ZyZXEoKSAvKiBzeXNjbGsgZm9yIE1QQzg1eHggKi8KKworLyoKKyAqIFRoZXNlIGNhbiBiZSB0b2dnbGVkIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0LgorICovCisjZGVmaW5lIENPTkZJR19MMl9DQUNIRQkJICAgIAkgICAgLyogdG9nZ2xlIEwyIGNhY2hlIAkqLworI2RlZmluZSBDT05GSUdfQlRCCQkJICAgIC8qIHRvZ2dsZSBicmFuY2ggcHJlZGl0aW9uICovCisjZGVmaW5lIENPTkZJR19BRERSX1NUUkVBTUlORwkJICAgIC8qIHRvZ2dsZSBhZGRyIHN0cmVhbWluZyAgICovCisKKy8qCisgKiBPbmx5IHBvc3NpYmxlIG9uIEU1MDAgVmVyc2lvbiAyIG9yIG5ld2VyIGNvcmVzLgorICovCisjZGVmaW5lIENPTkZJR19FTkFCTEVfMzZCSVRfUEhZUwkxCisKKworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCTEJLyogQ2FsbCBib2FyZF9wcmVfaW5pdCAqLworCisjdW5kZWYJQ0ZHX0RSQU1fVEVTVAkJCS8qIG1lbW9yeSB0ZXN0LCB0YWtlcyB0aW1lICovCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDAyMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDA0MDAwMDAKKworLyoKKyAqIEJhc2UgYWRkcmVzc2VzIC0tIE5vdGUgdGhlc2UgYXJlIGVmZmVjdGl2ZSBhZGRyZXNzZXMgd2hlcmUgdGhlCisgKiBhY3R1YWwgcmVzb3VyY2VzIGdldCBtYXBwZWQgKG5vdCBwaHlzaWNhbCBhZGRyZXNzZXMpCisgKi8KKyNkZWZpbmUgQ0ZHX0NDU1JCQVJfREVGQVVMVCAJMHhmZjcwMDAwMAkvKiBDQ1NSQkFSIERlZmF1bHQgKi8KKyNkZWZpbmUgQ0ZHX0NDU1JCQVIJCTB4ZTAwMDAwMDAJLyogcmVsb2NhdGVkIENDU1JCQVIgKi8KKyNkZWZpbmUgQ0ZHX0lNTVIJCUNGR19DQ1NSQkFSCS8qIFBRSUkgdXNlcyBDRkdfSU1NUiAqLworCisvKgorICogRERSIFNldHVwCisgKi8KKyNkZWZpbmUgQ0ZHX0REUl9TRFJBTV9CQVNFCTB4MDAwMDAwMDAJLyogRERSIGlzIHN5c3RlbSBtZW1vcnkqLworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJQ0ZHX0REUl9TRFJBTV9CQVNFCisKKyNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTCTB4NTEJCS8qIEREUiBESU1NICovCisKKy8qCisgKiBNYWtlIHN1cmUgcmVxdWlyZWQgb3B0aW9ucyBhcmUgc2V0CisgKi8KKyNpZm5kZWYgQ09ORklHX1NQRF9FRVBST00KKyNlcnJvciAoIkNPTkZJR19TUERfRUVQUk9NIGlzIHJlcXVpcmVkIikKKyNlbmRpZgorCisjdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKKworCisvKgorICogTG9jYWwgQnVzIERlZmluaXRpb25zCisgKi8KKworLyoKKyAqIEZMQVNIIG9uIHRoZSBMb2NhbCBCdXMKKyAqIFR3byBiYW5rcywgOE0gZWFjaCwgdXNpbmcgdGhlIENGSSBkcml2ZXIuCisgKiBCb290IGZyb20gQlIwL09SMCBiYW5rIGF0IDB4ZmYwMF8wMDAwCisgKiBBbHRlcm5hdGUgQlIxL09SMSBiYW5rIGF0IDB4ZmY4MF8wMDAwCisgKgorICogQlIwLCBCUjE6CisgKiAgICBCYXNlIGFkZHJlc3MgMCA9IDB4ZmYwMF8wMDAwID0gQlIwWzA6MTZdID0gMTExMSAxMTExIDAwMDAgMDAwMCAwCisgKiAgICBCYXNlIGFkZHJlc3MgMSA9IDB4ZmY4MF8wMDAwID0gQlIxWzA6MTZdID0gMTExMSAxMTExIDEwMDAgMDAwMCAwCisgKiAgICBQb3J0IFNpemUgPSAxNiBiaXRzID0gQlJ4WzE5OjIwXSA9IDEwCisgKiAgICBVc2UgR1BDTSA9IEJSeFsyNDoyNl0gPSAwMDAKKyAqICAgIFZhbGlkID0gQlJ4WzMxXSA9IDEKKyAqCisgKiAwICAgIDQgICAgOCAgICAxMiAgIDE2ICAgMjAgICAyNCAgIDI4CisgKiAxMTExIDExMTEgMTAwMCAwMDAwIDAwMDEgMDAwMCAwMDAwIDAwMDEgPSBmZjgwMTAwMSAgICBCUjAKKyAqIDExMTEgMTExMSAwMDAwIDAwMDAgMDAwMSAwMDAwIDAwMDAgMDAwMSA9IGZmMDAxMDAxICAgIEJSMQorICoKKyAqIE9SMCwgT1IxOgorICogICAgQWRkciBNYXNrID0gOE0gPSBPUnhbMDoxNl0gPSAxMTExIDExMTEgMTAwMCAwMDAwIDAKKyAqICAgIFJlc2VydmVkIE9SeFsxNzoxOF0gPSAxMSwgY29uZnVzaW9uIGhlcmU/CisgKiAgICBDU05UID0gT1J4WzIwXSA9IDEKKyAqICAgIEFDUyA9IGhhbGYgY3ljbGUgZGVsYXkgPSBPUnhbMjE6MjJdID0gMTEKKyAqICAgIFNDWSA9IDYgPSBPUnhbMjQ6MjddID0gMDExMAorICogICAgVFJMWCA9IHVzZSByZWxheGVkIHRpbWluZyA9IE9SeFsyOV0gPSAxCisgKiAgICBFQUQgPSB1c2UgZXh0ZXJuYWwgYWRkcmVzcyBsYXRjaCBkZWxheSA9IE9SWzMxXSA9IDEKKyAqCisgKiAwICAgIDQgICAgOCAgICAxMiAgIDE2ICAgMjAgICAyNCAgIDI4CisgKiAxMTExIDExMTEgMTAwMCAwMDAwIDAxMTAgMTExMCAwMTEwIDAxMDEgPSBmZjgwNmU2NSAgICBPUngKKyAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZmMDAwMDAwCS8qIHN0YXJ0IG9mIEZMQVNIIDhNICovCisKKyNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JCTB4ZmY4MDEwMDEKKyNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0JCTB4ZmYwMDEwMDEKKworI2RlZmluZQlDRkdfT1IwX1BSRUxJTQkJMHhmZjgwNmU2NQorI2RlZmluZQlDRkdfT1IxX1BSRUxJTQkJMHhmZjgwNmU2NQorCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsweGZmODAwMDAwLCBDRkdfRkxBU0hfQkFTRX0KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCQkvKiBudW1iZXIgb2YgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTEyOAkJLyogc2VjdG9ycyBwZXIgZGV2aWNlICovCisjdW5kZWYJQ0ZHX0ZMQVNIX0NIRUNLU1VNCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTYwMDAwCS8qIEZsYXNoIEVyYXNlIFRpbWVvdXQgKG1zKSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogRmxhc2ggV3JpdGUgVGltZW91dCAobXMpICovCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAJVEVYVF9CQVNFCS8qIHN0YXJ0IG9mIG1vbml0b3IgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisKKworLyoKKyAqIFNEUkFNIG9uIHRoZSBMb2NhbCBCdXMKKyAqLworI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmMDAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTSAqLworI2RlZmluZSBDRkdfTEJDX1NEUkFNX1NJWkUJNjQJCS8qIExCQyBTRFJBTSBpcyA2NE1CICovCisKKy8qCisgKiBCYXNlIFJlZ2lzdGVyIDIgYW5kIE9wdGlvbiBSZWdpc3RlciAyIGNvbmZpZ3VyZSBTRFJBTS4KKyAqIFRoZSBTRFJBTSBiYXNlIGFkZHJlc3MsIENGR19MQkNfU0RSQU1fQkFTRSwgaXMgMHhmMDAwMDAwMC4KKyAqCisgKiBGb3IgQlIyLCBuZWVkOgorICogICAgQmFzZSBhZGRyZXNzIG9mIDB4ZjAwMDAwMDAgPSBCUlswOjE2XSA9IDExMTEgMDAwMCAwMDAwIDAwMDAgMAorICogICAgcG9ydC1zaXplID0gMzItYml0cyA9IEJSMlsxOToyMF0gPSAxMQorICogICAgbm8gcGFyaXR5IGNoZWNraW5nID0gQlIyWzIxOjIyXSA9IDAwCisgKiAgICBTRFJBTSBmb3IgTVNFTCA9IEJSMlsyNDoyNl0gPSAwMTEKKyAqICAgIFZhbGlkID0gQlJbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMDAwMCAwMDAwIDAwMDAgMDAwMSAxMDAwIDAxMTAgMDAwMSA9IGYwMDAxODYxCisgKgorICogRklYTUU6IENGR19MQkNfU0RSQU1fQkFTRSBzaG91bGQgYmUgbWFza2VkIGFuZCBPUidlZCBpbnRvCisgKiBGSVhNRTogdGhlIHRvcCAxNyBiaXRzIG9mIEJSMi4KKyAqLworCisjZGVmaW5lIENGR19CUjJfUFJFTElNICAgICAgICAgIDB4ZjAwMDE4NjEKKworLyoKKyAqIFRoZSBTRFJBTSBzaXplIGluIE1CLCBDRkdfTEJDX1NEUkFNX1NJWkUsIGlzIDY0LgorICoKKyAqIEZvciBPUjIsIG5lZWQ6CisgKiAgICA2NE1CIG1hc2sgZm9yIEFNLCBPUjJbMDo3XSA9IDExMTEgMTEwMAorICoJCSAgIFhBTSwgT1IyWzE3OjE4XSA9IDExCisgKiAgICA5IGNvbHVtbnMgT1IyWzE5LTIxXSA9IDAxMAorICogICAgMTMgcm93cyAgIE9SMlsyMy0yNV0gPSAxMDAKKyAqICAgIEVBRCBzZXQgZm9yIGV4dHJhIHRpbWUgT1JbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTEwMCAwMDAwIDAwMDAgMDExMCAxMDAxIDAwMDAgMDAwMSA9IGZjMDA2OTAxCisgKi8KKworI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkJMHhmYzAwNjkwMQorCisjZGVmaW5lIENGR19MQkNfTENSUgkJMHgwMDAzMDAwNCAgICAvKiBMQiBjbG9jayByYXRpbyByZWcgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19MQkNSCQkweDAwMDAwMDAwICAgIC8qIExCIGNvbmZpZyByZWcgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19MU1JUCQkweDIwMDAwMDAwICAvKiBMQiBzZHJhbSByZWZyZXNoIHRpbWVyICovCisjZGVmaW5lIENGR19MQkNfTVJUUFIJCTB4MDAwMDAwMDAgIC8qIExCIHJlZnJlc2ggdGltZXIgcHJlc2NhbCovCisKKy8qCisgKiBMU0RNUiBtYXNrcworICovCisjZGVmaW5lIENGR19MQkNfTFNETVJfUkZFTgkoMSA8PCAoMzEgLSAgMSkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQlNNQTE1MTYJKDMgPDwgKDMxIC0gMTApKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0JTTUExNjE3CSg0IDw8ICgzMSAtIDEwKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9SRkNSMTYJKDcgPDwgKDMxIC0gMTYpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX1BSRVRPQUNUNwkoNyA8PCAoMzEgLSAxOSkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQUNUVE9SVzcJKDcgPDwgKDMxIC0gMjIpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0FDVFRPUlc2CSg2IDw8ICgzMSAtIDIyKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9CTDgJKDEgPDwgKDMxIC0gMjMpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX1dSQzQJKDAgPDwgKDMxIC0gMjcpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0NMMwkoMyA8PCAoMzEgLSAzMSkpCisKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9OT1JNQUwJKDAgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfQVJGUlNICSgxIDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX1NSRlJTSAkoMiA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9NUlcJKDMgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfUFJFQ0gJKDQgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfUENIQUxMCSg1IDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX0FDVEJOSwkoNiA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9SV0lOVgkoNyA8PCAoMzEgLSA0KSkKKworLyoKKyAqIENvbW1vbiBzZXR0aW5ncyBmb3IgYWxsIExvY2FsIEJ1cyBTRFJBTSBjb21tYW5kcy4KKyAqIEF0IHJ1biB0aW1lLCBlaXRoZXIgQlNNQTE1MTYgKGZvciBDUFUgMS4xKQorICogICAgICAgICAgICAgICAgICBvciBCU01BMTYxNyAoZm9yIENQVSAxLjApIChvbGQpCisgKiBpcyBPUidlZCBpbiB0b28uCisgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9DT01NT04JKCBDRkdfTEJDX0xTRE1SX1JGQ1IxNgkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9QUkVUT0FDVDcJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9BQ1RUT1JXNwlcCisJCQkJfCBDRkdfTEJDX0xTRE1SX0JMOAkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9XUkM0CQlcCisJCQkJfCBDRkdfTEJDX0xTRE1SX0NMMwkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9SRkVOCQlcCisJCQkJKQorCisvKgorICogVGhlIENBRE1VUyByZWdpc3RlcnMgYXJlIGNvbm5lY3RlZCB0byBDUzMgb24gQ0RTLgorICogVGhlIG5ldyBtZW1vcnkgbWFwIHBsYWNlcyBDQURNVVMgYXQgMHhmODAwMDAwMC4KKyAqCisgKiBGb3IgQlIzLCBuZWVkOgorICogICAgQmFzZSBhZGRyZXNzIG9mIDB4ZjgwMDAwMDAgPSBCUlswOjE2XSA9IDExMTEgMTAwMCAwMDAwIDAwMDAgMAorICogICAgcG9ydC1zaXplID0gOC1iaXRzICA9IEJSWzE5OjIwXSA9IDAxCisgKiAgICBubyBwYXJpdHkgY2hlY2tpbmcgID0gQlJbMjE6MjJdID0gMDAKKyAqICAgIEdQTUMgZm9yIE1TRUwgICAgICAgPSBCUlsyNDoyNl0gPSAwMDAKKyAqICAgIFZhbGlkICAgICAgICAgICAgICAgPSBCUlszMV0gICAgPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMDAwIDAwMDAgMDAwMCAwMDAwIDEwMDAgMDAwMCAwMDAxID0gZjgwMDA4MDEKKyAqCisgKiBGb3IgT1IzLCBuZWVkOgorICogICAgMSBNQiBtYXNrIGZvciBBTSwgICBPUlswOjE2XSAgPSAxMTExIDExMTEgMTExMSAwMDAwIDAKKyAqICAgIGRpc2FibGUgYnVmZmVyIGN0cmwgT1JbMTldICAgID0gMAorICogICAgQ1NOVCAgICAgICAgICAgICAgICBPUlsyMF0gICAgPSAxCisgKiAgICBBQ1MgICAgICAgICAgICAgICAgIE9SWzIxOjIyXSA9IDExCisgKiAgICBYQUNTICAgICAgICAgICAgICAgIE9SWzIzXSAgICA9IDEKKyAqICAgIFNDWSAxNSB3YWl0IHN0YXRlcyAgT1JbMjQ6MjddID0gMTExMQltYXggaXMgc3Vib3B0aW1hbCBidXQgc2FmZQorICogICAgU0VUQSAgICAgICAgICAgICAgICBPUlsyOF0gICAgPSAwCisgKiAgICBUUkxYICAgICAgICAgICAgICAgIE9SWzI5XSAgICA9IDEKKyAqICAgIEVIVFIgICAgICAgICAgICAgICAgT1JbMzBdICAgID0gMQorICogICAgRUFEIGV4dHJhIHRpbWUgICAgICBPUlszMV0gICAgPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMTExIDExMTEgMDAwMCAwMDAwIDExMTEgMTExMSAwMTExID0gZmZmMDBmZjcKKyAqLworCisjZGVmaW5lIENBRE1VU19CQVNFX0FERFIgMHhmODAwMDAwMAorI2RlZmluZSBDRkdfQlIzX1BSRUxJTSAgIDB4ZjgwMDA4MDEKKyNkZWZpbmUgQ0ZHX09SM19QUkVMSU0gICAweGZmZjAwZmY3CisKKyNkZWZpbmUgQ09ORklHX0wxX0lOSVRfUkFNCisjZGVmaW5lIENGR19JTklUX1JBTV9MT0NLIAkxCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4ZTQwMTAwMDAJLyogSW5pdGlhbCBSQU0gYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5EICAgIAkweDQwMDAJICAgIC8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gUkFNICovCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUgIAkxMjgJICAgIC8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkgICAgCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCSAgICAJKDEyOCAqIDEwMjQpCS8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KKworLyogU2VyaWFsIFBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVggICAgIDIKKyN1bmRlZglDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFICAgIDEKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCQlnZXRfYnVzX2ZyZXEoMCkKKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgIFwKKwl7MzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwxMTUyMDB9CisKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgKENGR19DQ1NSQkFSKzB4NDUwMCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMiAgICAgICAgKENGR19DQ1NSQkFSKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNpZmRlZiAgQ0ZHX0hVU0hfUEFSU0VSCisjZGVmaW5lIENGR19QUk9NUFRfSFVTSF9QUzIgIj4gIgorI2VuZGlmCisKKy8qIEkyQyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0ICovCisjdW5kZWYJQ09ORklHX1NPRlRfSTJDCQkJLyogSTJDIGJpdC1iYW5nZWQgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCTB4NTcKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorI2RlZmluZSBDRkdfSTJDX05PUFJPQkVTICAgICAgICB7MHg2OX0JLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMgKi8KKworLyoKKyAqIEdlbmVyYWwgUENJCisgKiBBZGRyZXNzZXMgYXJlIG1hcHBlZCAxLTEuCisgKi8KKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX0JBU0UJMHg4MDAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9NRU1fUEhZUwlDRkdfUENJMV9NRU1fQkFTRQorI2RlZmluZSBDRkdfUENJMV9NRU1fU0laRQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fQkFTRQkweGUyMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1BIWVMJQ0ZHX1BDSTFfSU9fQkFTRQorI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MTAwMDAwMAkvKiAxNk0gKi8KKworI2RlZmluZSBDRkdfUENJMl9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kyX01FTV9QSFlTCUNGR19QQ0kyX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0kyX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUENJMl9JT19CQVNFCTB4ZTMwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTJfSU9fUEhZUwlDRkdfUENJMl9JT19CQVNFCisjZGVmaW5lIENGR19QQ0kyX0lPX1NJWkUJMHgxMDAwMDAwCS8qIDE2TSAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfUENJX1BOUAkgICAgICAgICAgICAgICAJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KKworI3VuZGVmIENPTkZJR19FRVBSTzEwMAorI3VuZGVmIENPTkZJR19UVUxJUAorCisjaWYgIWRlZmluZWQoQ09ORklHX1BDSV9QTlApCisgICAgI2RlZmluZSBQQ0lfRU5FVDBfSU9BRERSICAgICAgMHhlMDAwMDAwMAorICAgICNkZWZpbmUgUENJX0VORVQwX01FTUFERFIgICAgIDB4ZTAwMDAwMDAKKyAgICAjZGVmaW5lIFBDSV9JRFNFTF9OVU1CRVIgICAgICAweDBjIAkvKnNsb3QwLT4zKElEU0VMKT0xMi0+MTUqLworI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwkJLyogc2hvdyBwY2kgZGV2aWNlcyBvbiBzdGFydHVwICovCisjZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTA1NyAgLyogTW90b3JvbGEgKi8KKworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKworCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorCisjaWZuZGVmIENPTkZJR19ORVRfTVVMVEkKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAJMQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMV9OQU1FCSJlVFNFQzAiCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiZVRTRUMxIgorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMwkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMzX05BTUUJImVUU0VDMiIKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzQJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDNF9OQU1FCSJlVFNFQzMiCisjdW5kZWYgQ09ORklHX01QQzg1WFhfRkVDCisKKyNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKKyNkZWZpbmUgVFNFQzNfUEhZX0FERFIJCTIKKyNkZWZpbmUgVFNFQzRfUEhZX0FERFIJCTMKKyNkZWZpbmUgRkVDX1BIWV9BRERSCQkzCisKKyNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAorI2RlZmluZSBUU0VDM19QSFlJRFgJCTAKKyNkZWZpbmUgVFNFQzRfUEhZSURYCQkwCisjZGVmaW5lIEZFQ19QSFlJRFgJCTAKKworLyogT3B0aW9ucyBhcmU6IGVUU0VDWzAtM10gKi8KKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiZVRTRUMwIgorCisjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLworCisvKgorICogRW52aXJvbm1lbnQKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSArIDB4NDAwMDApCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAJLyogMjU2SyhvbmUgc2VjdG9yKSBmb3IgZW52ICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIFwKKwkJCQl8IENGR19DTURfUENJIFwKKwkJCQl8IENGR19DTURfUElORyBcCisJCQkJfCBDRkdfQ01EX0kyQyBcCisJCQkJfCBDRkdfQ01EX01JSSkKKyNlbHNlCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIFwKKwkJCQl8IENGR19DTURfUElORyBcCisJCQkJfCBDRkdfQ01EX0kyQyBcCisJCQkJfCBDRkdfQ01EX01JSSkKKyNlbmRpZgorI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MjAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19IWgkJMTAwMAkJLyogZGVjcmVtZW50ZXIgZnJlcTogMW1zIHRpY2tzICovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDggPDwgMjApIAkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKworLyogQ2FjaGUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkdfRENBQ0hFX1NJWkUJMzI3NjgKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUqLworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290ICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoKKyAqIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KKyAqLworCisvKiBUaGUgbWFjIGFkZHJlc3NlcyBmb3IgYWxsIGV0aGVybmV0IGludGVyZmFjZSAqLworI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIgICAwMDpFMDowQzowMDowMDpGRAorI2RlZmluZSBDT05GSUdfSEFTX0VUSDEKKyNkZWZpbmUgQ09ORklHX0VUSDFBRERSICAwMDpFMDowQzowMDowMTpGRAorI2RlZmluZSBDT05GSUdfSEFTX0VUSDIKKyNkZWZpbmUgQ09ORklHX0VUSDJBRERSICAwMDpFMDowQzowMDowMjpGRAorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0lQQUREUiAgICAxOTIuMTY4LjEuMjUzCisKKyNkZWZpbmUgQ09ORklHX0hPU1ROQU1FICB1bmtub3duCisjZGVmaW5lIENPTkZJR19ST09UUEFUSCAgL25mc3Jvb3QKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFICB5b3VyLnVJbWFnZQorCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgMTkyLjE2OC4xLjEKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUCAxOTIuMTY4LjEuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgIDI1NS4yNTUuMjU1LjAKKworI2RlZmluZSBDT05GSUdfTE9BREFERFIgIDIwMDAwMCAgIC8qZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGZ0cCBhbmQgYm9vdG0qLworCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkgMTAgICAgICAgLyogLTEgZGlzYWJsZXMgYXV0by1ib290ICovCisjdW5kZWYgIENPTkZJR19CT09UQVJHUyAgICAgICAgICAgLyogdGhlIGJvb3QgY29tbWFuZCB3aWxsIHNldCBib290YXJncyovCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCTExNTIwMAorCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJICAgICAgICBcCisgICAibmV0ZGV2PWV0aDBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAiY29uc29sZWRldj10dHlTMVwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAicmFtZGlza2FkZHI9NDAwMDAwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAicmFtZGlza2ZpbGU9eW91ci5yYW1kaXNrLnUtYm9vdFwwIgorCisjZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIm5mc3Jvb3Q9JHNlcnZlcmlwOiRyb290cGF0aCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6JG5ldG1hc2s6JGhvc3RuYW1lOiRuZXRkZXY6b2ZmICIgXAorICAgICAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiICAgICAgICAgICAgICAgICAgICAgXAorICAgInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImJvb3RtICRsb2FkYWRkciIKKworI2RlZmluZSBDT05GSUdfUkFNQk9PVENPTU1BTkQgXAorICAgInNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiICAgICAgICAgICAgICAgICAgICAgXAorICAgInRmdHAgJHJhbWRpc2thZGRyICRyYW1kaXNrZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImJvb3RtICRsb2FkYWRkciAkcmFtZGlza2FkZHIiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EICBDT05GSUdfTkZTQk9PVENPTU1BTkQKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU1NUNEUy5oCmluZGV4IDM3OWExMmMuLmE0NGUzZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NTVDRFMuaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBDT05GSUdfQk9PS0UJCTEJLyogQk9PS0UgKi8KICNkZWZpbmUgQ09ORklHX0U1MDAJCTEJLyogQk9PS0UgZTUwMCBmYW1pbHkgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1eHgJCTEJLyogTVBDODU0MC82MC81NS80MSAqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBoYXMgQ1BNMiAqLwogI2RlZmluZSBDT05GSUdfTVBDODU1NQkJMQkvKiBNUEM4NTU1IHNwZWNpZmljICovCiAjZGVmaW5lIENPTkZJR19NUEM4NTU1Q0RTCTEJLyogTVBDODU1NUNEUyBib2FyZCBzcGVjaWZpYyAqLwogCkBAIC00MCw5ICs0MSwxMiBAQAogI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUIAkJLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICovCiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCiAjZGVmaW5lIENPTkZJR19TUERfRUVQUk9NCQkvKiBVc2UgU1BEIEVFUFJPTSBmb3IgRERSIHNldHVwKi8KLSNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLwogI2RlZmluZSBDT05GSUdfRERSX0RMTAkJCS8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkICovCi0jZGVmaW5lIENPTkZJR19ERFJfMlRfVElNSU5HCQkvKiBTZXRzIHRoZSAyVCB0aW1pbmcgYml0ICovCisjdW5kZWYgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KKworI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhEZWFkQmVlZgorCiAKIC8qCiAgKiBXaGVuIGluaXRpYWxpemluZyBmbGFzaCwgaWYgd2UgY2Fubm90IGZpbmQgdGhlIG1hbnVmYWN0dXJlciBJRCwKQEAgLTk0LDE4ICs5OCw1MCBAQAogI2Vycm9yICgiQ09ORklHX1NQRF9FRVBST00gaXMgcmVxdWlyZWQgYnkgTVBDODU1NTVDRFMiKQogI2VuZGlmCiAKKyN1bmRlZiBDT05GSUdfQ0xPQ0tTX0lOX01IWgorCisKIC8qCi0gKiBTRFJBTSBvbiB0aGUgTG9jYWwgQnVzCisgKiBMb2NhbCBCdXMgRGVmaW5pdGlvbnMKICAqLwotI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmMDAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTSAqLwotI2RlZmluZSBDRkdfTEJDX1NEUkFNX1NJWkUJNjQJCS8qIExCQyBTRFJBTSBpcyA2NE1CICovCisKKy8qCisgKiBGTEFTSCBvbiB0aGUgTG9jYWwgQnVzCisgKiBUd28gYmFua3MsIDhNIGVhY2gsIHVzaW5nIHRoZSBDRkkgZHJpdmVyLgorICogQm9vdCBmcm9tIEJSMC9PUjAgYmFuayBhdCAweGZmMDBfMDAwMAorICogQWx0ZXJuYXRlIEJSMS9PUjEgYmFuayBhdCAweGZmODBfMDAwMAorICoKKyAqIEJSMCwgQlIxOgorICogICAgQmFzZSBhZGRyZXNzIDAgPSAweGZmMDBfMDAwMCA9IEJSMFswOjE2XSA9IDExMTEgMTExMSAwMDAwIDAwMDAgMAorICogICAgQmFzZSBhZGRyZXNzIDEgPSAweGZmODBfMDAwMCA9IEJSMVswOjE2XSA9IDExMTEgMTExMSAxMDAwIDAwMDAgMAorICogICAgUG9ydCBTaXplID0gMTYgYml0cyA9IEJSeFsxOToyMF0gPSAxMAorICogICAgVXNlIEdQQ00gPSBCUnhbMjQ6MjZdID0gMDAwCisgKiAgICBWYWxpZCA9IEJSeFszMV0gPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMTExIDEwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMCAwMDAxID0gZmY4MDEwMDEgICAgQlIwCisgKiAxMTExIDExMTEgMDAwMCAwMDAwIDAwMDEgMDAwMCAwMDAwIDAwMDEgPSBmZjAwMTAwMSAgICBCUjEKKyAqCisgKiBPUjAsIE9SMToKKyAqICAgIEFkZHIgTWFzayA9IDhNID0gT1J4WzA6MTZdID0gMTExMSAxMTExIDEwMDAgMDAwMCAwCisgKiAgICBSZXNlcnZlZCBPUnhbMTc6MThdID0gMTEsIGNvbmZ1c2lvbiBoZXJlPworICogICAgQ1NOVCA9IE9SeFsyMF0gPSAxCisgKiAgICBBQ1MgPSBoYWxmIGN5Y2xlIGRlbGF5ID0gT1J4WzIxOjIyXSA9IDExCisgKiAgICBTQ1kgPSA2ID0gT1J4WzI0OjI3XSA9IDAxMTAKKyAqICAgIFRSTFggPSB1c2UgcmVsYXhlZCB0aW1pbmcgPSBPUnhbMjldID0gMQorICogICAgRUFEID0gdXNlIGV4dGVybmFsIGFkZHJlc3MgbGF0Y2ggZGVsYXkgPSBPUlszMV0gPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMTExIDEwMDAgMDAwMCAwMTEwIDExMTAgMDExMCAwMTAxID0gZmY4MDZlNjUgICAgT1J4CisgKi8KKwogI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHhmZjAwMDAwMAkvKiBzdGFydCBvZiBGTEFTSCA4TSAqLwogCi0jZGVmaW5lIENGR19CUjBfUFJFTElNCQkweGZmODAxMDAxCS8qIHBvcnQgc2l6ZSAxNmJpdCAqLwotI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkJMHhmZjAwMTAwMQkvKiBwb3J0IHNpemUgMTZiaXQgKi8KKyNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JCTB4ZmY4MDEwMDEKKyNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0JCTB4ZmYwMDEwMDEKIAotI2RlZmluZQlDRkdfT1IwX1BSRUxJTQkJMHhmZjgwNmU2MQkvKiA4TUIgRmxhc2ggKi8KLSNkZWZpbmUJQ0ZHX09SMV9QUkVMSU0JCTB4ZmY4MDZlNjEJLyogOE1CIEZsYXNoICovCisjZGVmaW5lCUNGR19PUjBfUFJFTElNCQkweGZmODA2ZTY1CisjZGVmaW5lCUNGR19PUjFfUFJFTElNCQkweGZmODA2ZTY1CiAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJezB4ZmY4MDAwMDAsIENGR19GTEFTSF9CQVNFfQogI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJCS8qIG51bWJlciBvZiBiYW5rcyAqLwpAQCAtMTIwLDExICsxNTYsMTIgQEAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQogI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTwogCi0jdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKIAogLyoKLSAqIExvY2FsIEJ1cyBEZWZpbml0aW9ucworICogU0RSQU0gb24gdGhlIExvY2FsIEJ1cwogICovCisjZGVmaW5lIENGR19MQkNfU0RSQU1fQkFTRQkweGYwMDAwMDAwCS8qIExvY2FsYnVzIFNEUkFNICovCisjZGVmaW5lIENGR19MQkNfU0RSQU1fU0laRQk2NAkJLyogTEJDIFNEUkFNIGlzIDY0TUIgKi8KIAogLyoKICAqIEJhc2UgUmVnaXN0ZXIgMiBhbmQgT3B0aW9uIFJlZ2lzdGVyIDIgY29uZmlndXJlIFNEUkFNLgpAQCAtMzI2LDcgKzM2Myw5IEBACiAKICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMV9OQU1FCSJUU0VDMCIKICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzIJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMl9OQU1FCSJUU0VDMSIKICN1bmRlZiBDT05GSUdfTVBDODVYWF9GRUMKICNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKICNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKQEAgLTMzNCw3ICszNzMsOSBAQAogI2RlZmluZSBUU0VDMV9QSFlJRFgJCTAKICNkZWZpbmUgVFNFQzJfUEhZSURYCQkwCiAjZGVmaW5lIEZFQ19QSFlJRFgJCTAKLSNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiTU9UTyBFTkVUMCIKKworLyogT3B0aW9ucyBhcmU6IFRTRUNbMC0xXSAqLworI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogI2VuZGlmCS8qIENPTkZJR19UU0VDX0VORVQgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmgKaW5kZXggNzI3MTczNy4uZGI4NzhjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIENPTkZJR19CT09LRQkJMQkvKiBCT09LRSAqLwogI2RlZmluZSBDT05GSUdfRTUwMAkJMQkvKiBCT09LRSBlNTAwIGZhbWlseSAqLwogI2RlZmluZSBDT05GSUdfTVBDODV4eAkJMQkvKiBNUEM4NTQwL01QQzg1NjAgKi8KLSNkZWZpbmUgQ09ORklHX01QQzg1NjAJCTEJLyogTVBDODU2MCBzcGVjaWZpYyAqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBoYXMgQ1BNMiAqLwogI2RlZmluZSBDT05GSUdfTVBDODU2MEFEUwkxCS8qIE1QQzg1NjBBRFMgYm9hcmQgc3BlY2lmaWMgKi8KIAogI2RlZmluZSBDT05GSUdfUENJCkBAIC00NiwxMCArNDYsMTIgQEAKICN1bmRlZiAgQ09ORklHX0VUSEVSX09OX0ZDQyAgICAgICAgICAgICAvKiBjcG0gRkNDIGV0aGVybmV0IHN1cHBvcnQgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKICNkZWZpbmUgQ09ORklHX1NQRF9FRVBST00JCS8qIFVzZSBTUEQgRUVQUk9NIGZvciBERFIgc2V0dXAqLwotI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCiAjZGVmaW5lIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQgKi8KICNkZWZpbmUgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KIAorI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhEZWFkQmVlZgorCiAKIC8qCiAgKiBzeXNjbGsgZm9yIE1QQzg1eHgKQEAgLTMzNywxMyArMzM5LDE3IEBACiAKICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMV9OQU1FCSJUU0VDMCIKICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzIJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMl9OQU1FCSJUU0VDMSIKICN1bmRlZiBDT05GSUdfTVBDODVYWF9GRUMKICNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKICNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKICNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCiAjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAotI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJNT1RPIEVORVQwIgorCisvKiBPcHRpb25zIGFyZTogVFNFQ1swLTFdICovCisjZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMwIgogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpCS8qIENQTSBGQ0MgRXRoZXJuZXQgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1BNODI2LmggYi9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaAppbmRleCBhNGM0ZmM5Li45Y2ExZTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaApAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkxCS8qIFRoaXMgaXMgYSBNUEM4MjYwIENQVQkqLwogI2RlZmluZSBDT05GSUdfUE04MjYJCTEJLyogLi4ub24gYSBQTTgyNjAgbW9kdWxlCSovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI3VuZGVmIENPTkZJR19EQl9DUjgyNl9KMzB4X09OCQkvKiBKMzB4IGp1bXBlcnMgb24gRC5CLiBjYXJyaWVyCSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QTTgyOC5oIGIvaW5jbHVkZS9jb25maWdzL1BNODI4LmgKaW5kZXggNWI3MWM5Ni4uN2Q5OGRmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1BNODI4LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1BNODI4LmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGEgTVBDODI2MCBDUFUJKi8KICNkZWZpbmUgQ09ORklHX1BNODI4CQkxCS8qIC4uLm9uIGEgUE04MjggbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI3VuZGVmIENPTkZJR19EQl9DUjgyNl9KMzB4X09OCQkvKiBKMzB4IGp1bXBlcnMgb24gRC5CLiBjYXJyaWVyICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QTTg1NC5oIGIvaW5jbHVkZS9jb25maWdzL1BNODU0LmgKaW5kZXggYjNlMWY1ZS4uMDdlM2YwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1BNODU0LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1BNODU0LmgKQEAgLTQ1LDEwICs0NSwxMiBAQAogI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKICN1bmRlZglDT05GSUdfU1BEX0VFUFJPTQkJLyogZG8gbm90IHVzZSBTUEQgRUVQUk9NIGZvciBERFIgc2V0dXAqLwotI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCiAjZGVmaW5lIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQgKi8KICNkZWZpbmUgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KIAorI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhEZWFkQmVlZgorCiAKIC8qCiAgKiBzeXNjbGsgZm9yIE1QQzg1eHgKQEAgLTI1NiwxNyArMjU4LDIxIEBACiAKICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMV9OQU1FCSJUU0VDMCIKICNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzIJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMl9OQU1FCSJUU0VDMSIKICNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKICNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKICNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCiAjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAogCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX0ZFQwkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX0ZFQ19OQU1FCQkiRkVDIgogI2RlZmluZSBGRUNfUEhZX0FERFIJCTMKICNkZWZpbmUgRkVDX1BIWUlEWAkJMAogCi0jZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIkVORVQwIgorLyogT3B0aW9ucyBhcmU6IFRTRUNbMC0xXSAqLworI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogI2RlZmluZQlDT05GSUdfSEFTX0VUSDEJCTEKICNkZWZpbmUJQ09ORklHX0hBU19FVEgyCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUlBYc3VwZXIuaCBiL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCmluZGV4IGNkZjcxNmMuLjZhZTk0MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCkBAIC0xNzMsNiArMTczLDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MCAgICAgICAgICAxICAgICAgIC8qIFRoaXMgaXMgYW4gTVBDODI2MCBDUFUgICAqLwogI2RlZmluZSBDT05GSUdfUlBYU1VQRVIgICAgICAgICAxICAgICAgIC8qIG9uIGFuIEVtYmVkZGVkIFBsYW5ldCBSUFggU3VwZXIgQm9hcmQgICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GIDEJLyogQ2FsbCBib2FyZF9lYXJseV9pbml0X2YJKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1JhdHRsZXIuaCBiL2luY2x1ZGUvY29uZmlncy9SYXR0bGVyLmgKaW5kZXggZjk4YTZjNi4uYTU1Mjk3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1JhdHRsZXIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUmF0dGxlci5oCkBAIC0zMyw2ICszMyw4IEBACiAjZGVmaW5lIENQVV9JRF9TVFIJCSJNUEM4MjUwIgogI2VuZGlmIC8qIENPTkZJR19NUEM4MjQ4ICovCiAKKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLworCiAjZGVmaW5lIENPTkZJR19SQVRUTEVSCQkJLyogQW5hbG9ndWUmTWljcm8gUmF0dGxlciBib2FyZCAqLwogCiAjdW5kZWYgREVCVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9TQkM4NTQwLmggYi9pbmNsdWRlL2NvbmZpZ3MvU0JDODU0MC5oCmluZGV4IDYwNTYxZWIuLjA0NTFiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9TQkM4NTQwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1NCQzg1NDAuaApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDODV4eF9SRVYxCTEJLyogTVBDODV4eCBSZXYgMS4wIGNoaXAJCSovCiAKIAotI2RlZmluZSBDT05GSUdfTVBDODU2MAkJMQkvKiBNUEM4NTYwIChDUFUpIHNwZWNpZmljCQkqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBoYXMgQ1BNMiAqLwogCiAjZGVmaW5lIENPTkZJR19TQkM4NTQwICAgICAgCTEgICAJLyogY29uZmlndXJhdGlvbiBmb3IgU0JDODU2MCBib2FyZCAqLwogCkBAIC0yMjcsMTAgKzIyNywxNCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQkJLyogVFNFQyBFdGhlcm5ldCBwb3J0ICovCiAKLSAgI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKLSAgI2RlZmluZSBDT05GSUdfUEhZX0JDTTU0MjFTCQkvKiBHaWdhQml0IEV0aGVyIFBIWQkgICAgICovCi0gICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCi0gICNkZWZpbmUgQ09ORklHX1BIWV9BRERSCTI1CS8qIFBIWSBhZGRyZXNzCQkJKi8KKyMgIGRlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKyMgIGRlZmluZSBDT05GSUdfTVBDODV4eF9UU0VDMQorIyAgZGVmaW5lIENPTkZJR19NUEM4NXh4X1RTRUMxX05BTUUJIlRTRUMwIgorIyAgZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50CQkqLworIyAgZGVmaW5lIFRTRUMxX1BIWV9BRERSCTI1CisjICBkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisvKiBPcHRpb25zIGFyZTogVFNFQzAgKi8KKyMgIGRlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpCS8qIENQTSBGQ0MgRXRoZXJuZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9TQkM4NTYwLmggYi9pbmNsdWRlL2NvbmZpZ3MvU0JDODU2MC5oCmluZGV4IDZiZDBhYmUuLjhiNDZhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9TQkM4NTYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1NCQzg1NjAuaApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDODV4eF9SRVYxCTEJLyogTVBDODV4eCBSZXYgMS4wIGNoaXAJCSovCiAKIAotI2RlZmluZSBDT05GSUdfTVBDODU2MAkJMQkvKiBNUEM4NTYwIChDUFUpIHNwZWNpZmljCQkqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBoYXMgQ1BNMiAqLwogI2RlZmluZSBDT05GSUdfU0JDODU2MCAgICAgIAkxICAgCS8qIGNvbmZpZ3VyYXRpb24gZm9yIFNCQzg1NjAgYm9hcmQgKi8KIAogI2RlZmluZSBDT05GSUdfTVBDODU2MEFEUwkxCS8qIE1QQzg1NjBBRFMgYm9hcmQgc3BlY2lmaWMgKHN1cHBsZW1lbnQpCSovCkBAIC0yMTUsMTAgKzIxNSwxNCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQkJLyogVFNFQyBFdGhlcm5ldCBwb3J0ICovCiAKLSAgI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKLSAgI2RlZmluZSBDT05GSUdfUEhZX0JDTTU0MjFTCQkvKiBHaWdhQml0IEV0aGVyIFBIWQkgICAgICovCi0gICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCi0gICNkZWZpbmUgQ09ORklHX1BIWV9BRERSCTI1CS8qIFBIWSBhZGRyZXNzCQkJKi8KKyMgIGRlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKyMgIGRlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KKyMgIGRlZmluZSBDT05GSUdfTVBDODV4eF9UU0VDMQorIyAgZGVmaW5lIENPTkZJR19NUEM4NXh4X1RTRUMxX05BTUUJIlRTRUMwIgorIyAgZGVmaW5lIFRTRUMxX1BIWV9BRERSCTI1CisjICBkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisvKiBPcHRpb25zIGFyZTogVFNFQzAgKi8KKyMgIGRlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpCS8qIENQTSBGQ0MgRXRoZXJuZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9TQ00uaCBiL2luY2x1ZGUvY29uZmlncy9TQ00uaAppbmRleCBlNDUzM2I0Li45MTkxNGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvU0NNLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1NDTS5oCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkxCS8qIFRoaXMgaXMgYSBNUEM4MjYwIENQVQkJKi8KICNkZWZpbmUgQ09ORklHX1RRTTgyNjAJCTIwMAkvKiAuLi5vbiBhIFRRTTgyNjAgbW9kdWxlIFJldi4yMDAJKi8KICNkZWZpbmUgQ09ORklHX1NDTSAgICAgICAgICAgICAgMQkvKiAuLi5vbiBhIFN5c3RlbSBDb250cm9sbGVyIE1vZHVsZQkqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCiAKICNpZiAoQ09ORklHX1RRTTgyNjAgPD0gMTAwKQogIyAgZXJyb3IgIlRRTTgyNjAgbW9kdWxlIHJldmlzb24gbm90IHN1cHBvcnRlZCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04MjYwLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODI2MC5oCmluZGV4IGVhZjEzOGEuLmU2MjY2YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04MjYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTgyNjAuaApAQCAtNTIsNiArNTIsOCBAQAogI2RlZmluZSBDT05GSUdfVFFNODI2MAkJMjAwCS8qIC4uLm9uIGEgVFFNODI2MCBtb2R1bGUgUmV2LjIwMAkqLwogI2VuZGlmCiAKKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLworCiAjZGVmaW5lIENPTkZJR184Mnh4X0NPTlNfU01DMQkxCS8qIGNvbnNvbGUgb24gU01DMQkJCSovCiAKICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CS8qIGF1dG9ib290IGFmdGVyIDUgc2Vjb25kcwkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NDAuaCBiL2luY2x1ZGUvY29uZmlncy9UUU04NTQwLmgKaW5kZXggOWRjNzdjNC4uODQzOGI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODU0MC5oCkBAIC0yODAsMjAgKzI4MCwyNCBAQAogCiAjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzFfTkFNRQkiVFNFQzAiCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiVFNFQzEiCiAjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkwCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkxCiAjZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAogI2RlZmluZSBUU0VDMl9QSFlJRFgJCTAKIAogI2RlZmluZSBDT05GSUdfTVBDODVYWF9GRUMJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9GRUNfTkFNRQkiRkVDIgogI2RlZmluZSBGRUNfUEhZX0FERFIJCTIKICNkZWZpbmUgRkVDX1BIWUlEWAkJMAogCiAjZGVmaW5lIENPTkZJR19IQVNfRVRIMQogI2RlZmluZSBDT05GSUdfSEFTX0VUSDIKIAotI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJFTkVUMSIKKy8qIE9wdGlvbnMgYXJlIFRTRUNbMC0xXSwgRkVDICovCisjZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMxIgogCiAjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODU2MC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg1NjAuaAppbmRleCBmNDE4ZTI2Li4xNDY2ZjMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODU2MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NTYwLmgKQEAgLTI3Niw2ICsyNzYsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiVFNFQzEiCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkxCiAjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAogCkBAIC0yODgsNyArMjg5LDcgQEAKICNkZWZpbmUgQ0ZHX0NQTUZDUl9SQU1UWVBFICAgIDAKICNkZWZpbmUgQ0ZHX0ZDQ19QU01SICAgICAgICAgIChGQ0NfUFNNUl9GREUgfCBGQ0NfUFNNUl9MUEIpCiAKLSNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiRU5FVDEiCisjZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMxIgogCiAvKgogICogRW52aXJvbm1lbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9aUEMxOTAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvWlBDMTkwMC5oCmluZGV4IDY4NTc5NzMuLmY3MWU2OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9aUEMxOTAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1pQQzE5MDAuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVICAgICAgKi8KICNkZWZpbmUgQ09ORklHX1pQQzE5MDAJCTEJLyogLi4ub24gWmVwaHlyIFpQQy4xOTAwIGJvYXJkICovCiAjZGVmaW5lIENQVV9JRF9TVFIJCSJNUEM4MjY1IgorI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCiAKICN1bmRlZiBERUJVRwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXRjLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXRjLmgKaW5kZXggMjc1MTI0OC4uODgxYTRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0Yy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdGMuaApAQCAtMzUsNiArMzUsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkxCS8qIFRoaXMgaXMgYW4gTVBDODI2MCBDUFUJCSovCiAjZGVmaW5lIENPTkZJR19BVEMJCTEJLyogLi4ub24gYSBBVEMgYm9hcmQJKi8KKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLwogCiAvKgogICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jb2dlbnRfbXBjODI2MC5oIGIvaW5jbHVkZS9jb25maWdzL2NvZ2VudF9tcGM4MjYwLmgKaW5kZXggYjNlYzg5Yi4uYWVhMmU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2NvZ2VudF9tcGM4MjYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2NvZ2VudF9tcGM4MjYwLmgKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVCSovCiAjZGVmaW5lIENPTkZJR19DT0dFTlQJCTEJLyogdXNpbmcgQ29nZW50IE1vZHVsYXIgQXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI2RlZmluZQlDT05GSUdfTUlTQ19JTklUX0YJMQkvKiBVc2UgbWlzY19pbml0X2YoKQkJKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2VwODI2MC5oIGIvaW5jbHVkZS9jb25maWdzL2VwODI2MC5oCmluZGV4IGZiMzM1ZGIuLjk4ZTE3MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9lcDgyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZXA4MjYwLmgKQEAgLTQ4LDYgKzQ4LDggQEAKICNkZWZpbmUgQ0ZHX0VQODI2MF9IMgkxCiAvKiAjdW5kZWYgQ0ZHX0VQODI2MF9IMiAgKi8KIAorI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCisKIC8qIFdoYXQgaXMgdGhlIG9zY2lsbGF0b3IncyAoVVgyKSBmcmVxdWVuY3kgaW4gSHo/ICovCiAjZGVmaW5lIENPTkZJR184MjYwX0NMS0lOICAoNjYgKiAxMDAwICogMTAwMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2d3ODI2MC5oIGIvaW5jbHVkZS9jb25maWdzL2d3ODI2MC5oCmluZGV4IDM2NjZiZGIuLjZjMDgwNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9ndzgyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZ3c4MjYwLmgKQEAgLTMzMCw2ICszMzAsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwICAgICAgMSAgIC8qIFRoaXMgaXMgYW4gTVBDODI2MCBDUFUgICAqLwogI2RlZmluZSBDT05GSUdfR1c4MjYwICAgICAgIDEgICAvKiBvbiBhbiBHVzgyNjAgQm9hcmQgICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2h5bW9kLmggYi9pbmNsdWRlL2NvbmZpZ3MvaHltb2QuaAppbmRleCA5MGQ2YjI1Li4wZDYyYjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvaHltb2QuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvaHltb2QuaApAQCAtMzUsNiArMzUsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NUEM4MjYwCQkxCS8qIFRoaXMgaXMgYW4gTVBDODI2MCBDUFUJKi8KICNkZWZpbmUgQ09ORklHX0hZTU9ECQkxCS8qIC4uLm9uIGEgSHltb2QgYm9hcmQJCSovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI2RlZmluZQlDT05GSUdfTUlTQ19JTklUX0YJMQkvKiBVc2UgbWlzY19pbml0X2YoKQkJKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3BwbWM4MjYwLmggYi9pbmNsdWRlL2NvbmZpZ3MvcHBtYzgyNjAuaAppbmRleCAyYWQyODY3Li42MGIwYjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcHBtYzgyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcHBtYzgyNjAuaApAQCAtMjk3LDYgKzI5Nyw3IEBACiAKICNkZWZpbmUgQ09ORklHX01QQzgyNjAJCTEJLyogVGhpcyBpcyBhbiBNUEM4MjYwIENQVSAgICovCiAjZGVmaW5lIENPTkZJR19QUE1DODI2MAkJMQkvKiBvbiBhbiBXaW5kIFJpdmVyIFBQTUM4MjYwIEJvYXJkICAqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBIYXMgYSBDUE0yICovCiAKIC8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KICNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yc2Rwcm90by5oIGIvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKaW5kZXggYjFmNmNiMi4uNmM5ZTM5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVCSovCiAjZGVmaW5lIENPTkZJR19SU0RfUFJPVE8JMQkvKiBvbiBhIFImUyBQcm90b2NvbCBCb2FyZCAgICAgICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogI2RlZmluZQlDT05GSUdfTUlTQ19JTklUX0YJMQkvKiBVc2UgbWlzY19pbml0X2YoKQkJKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NhY3NuZy5oIGIvaW5jbHVkZS9jb25maWdzL3NhY3NuZy5oCmluZGV4IGNjOTc3NGMuLjAzMWViYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYWNzbmcuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2Fjc25nLmgKQEAgLTU0NCw2ICs1NDQsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVICAgKi8KICNkZWZpbmUgQ09ORklHX1NCQzgyNjAJCTEJLyogb24gYW4gRVNUIFNCQzgyNjAgQm9hcmQgICovCiAjZGVmaW5lIENPTkZJR19TQUNTbmcJCTEJLyogbXVuZ2VkIGZvciB0aGUgU0FDU25nICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NiYzgyNjAuaCBiL2luY2x1ZGUvY29uZmlncy9zYmM4MjYwLmgKaW5kZXggZGM5Y2VjMy4uNDVlNDQ5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NiYzgyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2JjODI2MC5oCkBAIC00ODEsNiArNDgxLDcgQEAKIAogI2RlZmluZSBDT05GSUdfTVBDODI2MAkJMQkvKiBUaGlzIGlzIGFuIE1QQzgyNjAgQ1BVICAgKi8KICNkZWZpbmUgQ09ORklHX1NCQzgyNjAJCTEJLyogb24gYW4gRVNUIFNCQzgyNjAgQm9hcmQgICovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIEhhcyBhIENQTTIgKi8KIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NiYzg1NjAuaCBiL2luY2x1ZGUvY29uZmlncy9zYmM4NTYwLmgKaW5kZXggOGNmOWVlYi4uNWE0MzRkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NiYzg1NjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2JjODU2MC5oCkBAIC00MCw3ICs0MCw3IEBACiAjZGVmaW5lIENPTkZJR19NUEM4NXh4X1JFVjEJMQkvKiBNUEM4NXh4IFJldiAxLjAgY2hpcAkJKi8KIAogCi0jZGVmaW5lIENPTkZJR19NUEM4NTYwCQkxCS8qIE1QQzg1NjAgc3BlY2lmaWMJCSovCisjZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIGhhcyBDUE0yICovCiAjZGVmaW5lIENPTkZJR19TQkM4NTYwCQkxCS8qIGNvbmZpZ3VyYXRpb24gZm9yIFNCQzg1NjAgYm9hcmQgKi8KIAogLyogWFhYIGZsYWdnaW5nIHRoaXMgYXMgc29tZXRoaW5nIEkgbWlnaHQgd2FudCB0byBkZWxldGUgKi8KQEAgLTIxMCwxMCArMjEwLDE0IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCQkvKiBUU0VDIEV0aGVybmV0IHBvcnQgKi8KIAotICAjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQotICAjZGVmaW5lIENPTkZJR19QSFlfQkNNNTQyMVMJMQkvKiBHaWdhQml0IEV0aGVyIFBIWQkgICAgICovCi0gICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCi0gICNkZWZpbmUgQ09ORklHX1BIWV9BRERSCTI1CS8qIFBIWSBhZGRyZXNzCQkJKi8KKyMgIGRlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKyMgIGRlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KKyMgIGRlZmluZSBDT05GSUdfTVBDODV4eF9UU0VDMQorIyAgZGVmaW5lIENPTkZJR19NUEM4NXh4X1RTRUMxX05BTUUJIlRTRUMwIgorIyAgZGVmaW5lIFRTRUMxX1BIWV9BRERSCTI1CisjICBkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisvKiBPcHRpb25zIGFyZTogVFNFQzAgKi8KKyMgIGRlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQkvKiBDUE0gRkNDIEV0aGVybmV0ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zdHhncDMuaCBiL2luY2x1ZGUvY29uZmlncy9zdHhncDMuaAppbmRleCBlOTI2MWRiLi5lMjE4NTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc3R4Z3AzLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3N0eGdwMy5oCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIENPTkZJR19CT09LRQkJMQkvKiBCT09LRQkJKi8KICNkZWZpbmUgQ09ORklHX0U1MDAJCTEJLyogQk9PS0UgZTUwMCBmYW1pbHkJKi8KICNkZWZpbmUgQ09ORklHX01QQzg1eHgJCTEJLyogTVBDODU0MC9NUEM4NTYwCSovCi0jZGVmaW5lIENPTkZJR19NUEM4NTYwCQkxCS8qIE1QQzg1NjAgc3BlY2lmaWMJKi8KKyNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogaGFzIENQTTIgKi8KICNkZWZpbmUgQ09ORklHX1NUWEdQMwkJMQkvKiBTaWxpY29uIFR4IEdQUFAgYm9hcmQgc3BlY2lmaWMqLwogCiAjdW5kZWYgIENPTkZJR19QQ0kJICAgICAgICAgCS8qIHBjaSBldGhlcm5ldCBzdXBwb3J0CSovCkBAIC0yMjcsMTQgKzIyNywxNiBAQAogI2RlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KIAogI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMQkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxX05BTUUJIlRTRUMwIgogI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMgkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyX05BTUUJIlRTRUMxIgogI3VuZGVmIENPTkZJR19NUFM4NVhYX0ZFQwogCiAjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkyCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQk0CiAjZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAogI2RlZmluZSBUU0VDMl9QSFlJRFgJCTAKLSNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiTU9UTyBFTkVUMCIKKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiVFNFQzAiCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0VUSEVSX09OX0ZDQykJLyogQ1BNIEZDQyBFdGhlcm5ldCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2lvcG9ydHMuaCBiL2luY2x1ZGUvaW9wb3J0cy5oCmluZGV4IGViYTlhZWUuLmQ3ZTE5ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW9wb3J0cy5oCisrKyBiL2luY2x1ZGUvaW9wb3J0cy5oCkBAIC0yNSw3ICsyNSw3IEBACiAgKiB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hcCBhbGlnbnMgdGhlIGFib3ZlIHN0cnVjdHVyZSBvbgogICogYSAweDIwIGJ5dGUgYm91bmRhcnkKICAqLwotI2lmZGVmIENPTkZJR19NUEM4NTYwCisjaWZkZWYgQ09ORklHX01QQzg1eHgKICNkZWZpbmUgaW9wb3J0X2FkZHIoaW0sIGlkeCkgKGlvcG9ydF90ICopKCh1aW50KSYoKGltKS0+aW1fY3BtLmltX2NwbV9pb3ApICsgKChpZHgpKjB4MjApKQogI2Vsc2UKICNkZWZpbmUgaW9wb3J0X2FkZHIoaW0sIGlkeCkgKGlvcG9ydF90ICopKCh1aW50KSYoaW0pLT5pbV9pb3BvcnQgKyAoKGlkeCkqMHgyMCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL21wYzgzeHguaCBiL2luY2x1ZGUvbXBjODN4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjcxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21wYzgzeHguaApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIG1wYzgzeHguaAorICoKKyAqIE1QQzgzeHggc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fTVBDODNYWF9IX18KKyNkZWZpbmUgX19NUEM4M1hYX0hfXworCisjaWYgZGVmaW5lZChDT05GSUdfRTMwMCkKKyNpbmNsdWRlIDxhc20vZTMwMC5oPgorI2VuZGlmCisKKy8qCisgKiBNUEM4M3h4IGNwdSBwcm92aWRlIFJDUiByZWdpc3RlciB0byBkbyByZXNldCB0aGluZyBzcGVjaWFsbHkuIGVhc2llcgorICogdG8gaW1wbGVtZW50CisgKi8KKworI2RlZmluZSBNUEM4M3h4X1JFU0VUCisKKy8qCisgKiBTeXN0ZW0gcmVzZXQgb2Zmc2V0IChQb3dlclBDIHN0YW5kYXJkKQorICovCisjZGVmaW5lIEVYQ19PRkZfU1lTX1JFU0VUCTB4MDEwMAorCisvKgorICogRGVmYXVsdCBJbnRlcm5hbCBNZW1vcnkgUmVnaXN0ZXIgU3BhY2UgKEZyZWVzY2FsZSByZWNvbWFuZGF0aW9uKQorICovCisjZGVmaW5lIENPTkZJR19ERUZBVUxUX0lNTVIgMHhGRjQwMDAwMAorCisvKgorICogV2F0Y2hkb2cKKyAqLworI2RlZmluZSBTV0NSUiAgICAgIDB4MDIwNAorI2RlZmluZSBTV0NSUl9TV1RDIDB4RkZGRjAwMDAgLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZSBDb3VudC4gKi8KKyNkZWZpbmUgU1dDUlJfU1dFTiAweDAwMDAwMDA0IC8qIFdhdGNoZG9nIEVuYWJsZSBiaXQuICovCisjZGVmaW5lIFNXQ1JSX1NXUkkgMHgwMDAwMDAwMiAvKiBTb2Z0d2FyZSBXYXRjaGRvZyBSZXNldC9JbnRlcnJ1cHQgU2VsZWN0IGJpdC4gKi8KKyNkZWZpbmUgU1dDUlJfU1dQUiAweDAwMDAwMDAxIC8qIFNvZnR3YXJlIFdhdGNoZG9nIENvdW50ZXIgUHJlc2NhbGUgYml0LiAqLworI2RlZmluZSBTV0NSUl9SRVMgIH4oU1dDUlJfU1dUQyB8IFNXQ1JSX1NXRU4gfCBTV0NSUl9TV1JJIHwgU1dDUlJfU1dQUikKKworI2RlZmluZSBTV0NOUiAgICAgIDB4MDIwOAorI2RlZmluZSBTV0NOUl9TV0NOIDB4MDAwMEZGRkYgU29mdHdhcmUgV2F0Y2hkb2cgQ291bnQgRmllbGQuCisjZGVmaW5lIFNXQ05SX1JFUyAgfihTV0NOUl9TV0NOKQorCisjZGVmaW5lIFNXU1JSICAgICAgMHgwMjBFCisKKy8qCisgKiBEZWZhdWx0IEludGVybmFsIE1lbW9yeSBSZWdpc3RlciBTcGFjZSAoRnJlZXNjYWxlIHJlY29tYW5kYXRpb24pCisgKi8KKyNkZWZpbmUgSU1NUkJBUiAweDAwMDAKKyNkZWZpbmUgSU1NUkJBUl9CQVNFX0FERFIgICAgIDB4RkZGMDAwMDAgLyogSWRlbnRpZmllcyB0aGUgMTIgbW9zdC1zaWduaWZpY2FudCBhZGRyZXNzIGJpdHMgb2YgdGhlIGJhc2Ugb2YgdGhlIDEgTUJ5dGUgaW50ZXJuYWwgbWVtb3J5IHdpbmRvdy4gKi8KKyNkZWZpbmUgSU1NUkJBUl9SRVMgICAgICAgICAgIH4oSU1NUkJBUl9CQVNFX0FERFIpCisKKy8qCisgKiBEZWZhdWx0IEludGVybmFsIE1lbW9yeSBSZWdpc3RlciBTcGFjZSAoRnJlZXNjYWxlIHJlY29tYW5kYXRpb24pCisgKi8KKyNkZWZpbmUgTEJMQVdCQVIwIDB4MDAyMAorI2RlZmluZSBMQkxBV0FSMCAgMHgwMDI0CisjZGVmaW5lIExCTEFXQkFSMSAweDAwMjgKKyNkZWZpbmUgTEJMQVdBUjEgIDB4MDAyQworI2RlZmluZSBMQkxBV0JBUjIgMHgwMDMwCisjZGVmaW5lIExCTEFXQVIyICAweDAwMzQKKyNkZWZpbmUgTEJMQVdCQVIzIDB4MDAzOAorI2RlZmluZSBMQkxBV0FSMyAgMHgwMDNDCisKKworLyoKKyAqIEJhc2UgUmVnaXN0ZXJzICYgT3B0aW9uIFJlZ2lzdGVycworICovCisjZGVmaW5lIEJSMCAweDUwMDAKKyNkZWZpbmUgQlIxIDB4NTAwOAorI2RlZmluZSBCUjIgMHg1MDEwCisjZGVmaW5lIEJSMyAweDUwMTgKKyNkZWZpbmUgQlI0IDB4NTAyMAorI2RlZmluZSBCUjUgMHg1MDI4CisjZGVmaW5lIEJSNiAweDUwMzAKKyNkZWZpbmUgQlI3IDB4NTAzOAorCisjZGVmaW5lIEJSX0JBICAgMHhGRkZGODAwMAorI2RlZmluZSBCUl9CQV9TSElGVCAgICAgMTUKKyNkZWZpbmUgQlJfUFMgICAweDAwMDAxODAwCisjZGVmaW5lIEJSX1BTX1NISUZUICAgICAxMQorI2RlZmluZSBCUl9ERUNDIDB4MDAwMDA2MDAKKyNkZWZpbmUgQlJfREVDQ19TSElGVCAgICA5CisjZGVmaW5lIEJSX1dQICAgMHgwMDAwMDEwMAorI2RlZmluZSBCUl9XUF9TSElGVCAgICAgIDgKKyNkZWZpbmUgQlJfTVNFTCAweDAwMDAwMEUwCisjZGVmaW5lIEJSX01TRUxfU0hJRlQgICAgNQorI2RlZmluZSBCUl9WICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQlJfVl9TSElGVCAgICAgICAwCisjZGVmaW5lIEJSX1JFUyAgfihCUl9CQXxCUl9QU3xCUl9ERUNDfEJSX1dQfEJSX01TRUx8QlJfVikKKworI2RlZmluZSBPUjAgMHg1MDA0CisjZGVmaW5lIE9SMSAweDUwMEMKKyNkZWZpbmUgT1IyIDB4NTAxNAorI2RlZmluZSBPUjMgMHg1MDFDCisjZGVmaW5lIE9SNCAweDUwMjQKKyNkZWZpbmUgT1I1IDB4NTAyQworI2RlZmluZSBPUjYgMHg1MDM0CisjZGVmaW5lIE9SNyAweDUwM0MKKworI2RlZmluZSBPUl9HUENNX0FNICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgT1JfR1BDTV9BTV9TSElGVCAgICAgIDE1CisjZGVmaW5lIE9SX0dQQ01fQkNUTEQgMHgwMDAwMTAwMAorI2RlZmluZSBPUl9HUENNX0JDVExEX1NISUZUICAgMTIKKyNkZWZpbmUgT1JfR1BDTV9DU05UICAweDAwMDAwODAwCisjZGVmaW5lIE9SX0dQQ01fQ1NOVF9TSElGVCAgICAxMQorI2RlZmluZSBPUl9HUENNX0FDUyAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgT1JfR1BDTV9BQ1NfU0hJRlQgICAgICA5CisjZGVmaW5lIE9SX0dQQ01fWEFDUyAgMHgwMDAwMDEwMAorI2RlZmluZSBPUl9HUENNX1hBQ1NfU0hJRlQgICAgIDgKKyNkZWZpbmUgT1JfR1BDTV9TQ1kgICAweDAwMDAwMEYwCisjZGVmaW5lIE9SX0dQQ01fU0NZX1NISUZUICAgICAgNAorI2RlZmluZSBPUl9HUENNX1NFVEEgIDB4MDAwMDAwMDgKKyNkZWZpbmUgT1JfR1BDTV9TRVRBX1NISUZUICAgICAzCisjZGVmaW5lIE9SX0dQQ01fVFJMWCAgMHgwMDAwMDAwNAorI2RlZmluZSBPUl9HUENNX1RSTFhfU0hJRlQgICAgIDIKKyNkZWZpbmUgT1JfR1BDTV9FSFRSICAweDAwMDAwMDAyCisjZGVmaW5lIE9SX0dQQ01fRUhUUl9TSElGVCAgICAgMQorI2RlZmluZSBPUl9HUENNX0VBRCAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgT1JfR1BDTV9FQURfU0hJRlQgICAgICAwCisKKyNkZWZpbmUgT1JfVVBNX0FNICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgT1JfVVBNX0FNX1NISUZUICAgICAgMTUKKyNkZWZpbmUgT1JfVVBNX1hBTSAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgT1JfVVBNX1hBTV9TSElGVCAgICAgMTMKKyNkZWZpbmUgT1JfVVBNX0JDVExEIDB4MDAwMDEwMDAKKyNkZWZpbmUgT1JfVVBNX0JDVExEX1NISUZUICAgMTIKKyNkZWZpbmUgT1JfVVBNX0JJICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgT1JfVVBNX0JJX1NISUZUICAgICAgIDgKKyNkZWZpbmUgT1JfVVBNX1RSTFggIDB4MDAwMDAwMDQKKyNkZWZpbmUgT1JfVVBNX1RSTFhfU0hJRlQgICAgIDIKKyNkZWZpbmUgT1JfVVBNX0VIVFIgIDB4MDAwMDAwMDIKKyNkZWZpbmUgT1JfVVBNX0VIVFJfU0hJRlQgICAgIDEKKyNkZWZpbmUgT1JfVVBNX0VBRCAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgT1JfVVBNX0VBRF9TSElGVCAgICAgIDAKKworI2RlZmluZSBPUl9TRFJBTV9BTSAgICAweEZGRkY4MDAwCisjZGVmaW5lIE9SX1NEUkFNX0FNX1NISUZUICAgICAgMTUKKyNkZWZpbmUgT1JfU0RSQU1fWEFNICAgMHgwMDAwNjAwMAorI2RlZmluZSBPUl9TRFJBTV9YQU1fU0hJRlQgICAgIDEzCisjZGVmaW5lIE9SX1NEUkFNX0NPTFMgIDB4MDAwMDFDMDAKKyNkZWZpbmUgT1JfU0RSQU1fQ09MU19TSElGVCAgICAxMAorI2RlZmluZSBPUl9TRFJBTV9ST1dTICAweDAwMDAwMUMwCisjZGVmaW5lIE9SX1NEUkFNX1JPV1NfU0hJRlQgICAgIDYKKyNkZWZpbmUgT1JfU0RSQU1fUE1TRUwgMHgwMDAwMDAyMAorI2RlZmluZSBPUl9TRFJBTV9QTVNFTF9TSElGVCAgICA1CisjZGVmaW5lIE9SX1NEUkFNX0VBRCAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgT1JfU0RSQU1fRUFEX1NISUZUICAgICAgMAorCisvKgorICogSGFyZCBSZXNldCBDb25maWdyYXRpb24gV29yZCAtIEhpZ2gKKyAqLworI2RlZmluZSBIUkNXSF9QQ0lfQUdFTlQgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfUENJX0hPU1QgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgSFJDV0hfMzJfQklUX1BDSSAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhSQ1dIXzY0X0JJVF9QQ0kgICAgICAgICAgICAgMHg0MDAwMDAwMAorCisjZGVmaW5lIEhSQ1dIX1BDSTFfQVJCSVRFUl9ESVNBQkxFICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9QQ0kxX0FSQklURVJfRU5BQkxFICAgIDB4MjAwMDAwMDAKKworI2RlZmluZSBIUkNXSF9QQ0kyX0FSQklURVJfRElTQUJMRSAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfUENJMl9BUkJJVEVSX0VOQUJMRSAgICAweDEwMDAwMDAwCisKKyNkZWZpbmUgSFJDV0hfQ09SRV9ESVNBQkxFICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEhSQ1dIX0NPUkVfRU5BQkxFICAgICAgICAgICAgMHgwMDAwMDAwMAorCisjZGVmaW5lIEhSQ1dIX0ZST01fMFgwMDAwMDEwMCAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9GUk9NXzBYRkZGMDAxMDAgICAgICAgIDB4MDQwMDAwMDAKKworI2RlZmluZSBIUkNXSF9CT09UU0VRX0RJU0FCTEUgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfQk9PVFNFUV9OT1JNQUwgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEhSQ1dIX0JPT1RTRVFfRVhURU5ERUQgICAgICAgMHgwMjAwMDAwMAorCisjZGVmaW5lIEhSQ1dIX1NXX1dBVENIRE9HX0RJU0FCTEUgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9TV19XQVRDSERPR19FTkFCTEUgICAgIDB4MDA4MDAwMDAKKworI2RlZmluZSBIUkNXSF9ST01fTE9DX0REUl9TRFJBTSAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfUk9NX0xPQ19QQ0kxICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfUENJMiAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIUkNXSF9ST01fTE9DX0xPQ0FMXzhCSVQgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgSFJDV0hfUk9NX0xPQ19MT0NBTF8xNkJJVCAgICAweDAwNjAwMDAwCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTE9DQUxfMzJCSVQgICAgMHgwMDcwMDAwMAorCisjZGVmaW5lIEhSQ1dIX1RTRUMxTV9JTl9SR01JSSAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9UU0VDMU1fSU5fUlRCSSAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSFJDV0hfVFNFQzFNX0lOX0dNSUkgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEhSQ1dIX1RTRUMxTV9JTl9UQkkgICAgICAgICAgMHgwMDAwQzAwMAorCisjZGVmaW5lIEhSQ1dIX1RTRUMyTV9JTl9SR01JSSAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9UU0VDMk1fSU5fUlRCSSAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSFJDV0hfVFNFQzJNX0lOX0dNSUkgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEhSQ1dIX1RTRUMyTV9JTl9UQkkgICAgICAgICAgMHgwMDAwMzAwMAorCisjZGVmaW5lIEhSQ1dIX0JJR19FTkRJQU4gICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9MSVRUTEVfRU5ESUFOICAgICAgICAgIDB4MDAwMDAwMDgKKworLyoKKyAqIEhhcmQgUmVzZXQgQ29uZmlncmF0aW9uIFdvcmQgLSBMb3cKKyAqLworI2RlZmluZSBIUkNXTF9MQ0xfQlVTX1RPX1NDQl9DTEtfMVgxIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0xfTENMX0JVU19UT19TQ0JfQ0xLXzJYMSAweDgwMDAwMDAwCisKKyNkZWZpbmUgSFJDV0xfRERSX1RPX1NDQl9DTEtfMVgxICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhSQ1dMX0REUl9UT19TQ0JfQ0xLXzJYMSAgICAgMHg0MDAwMDAwMAorCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl8xNlgxICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXTF9DU0JfVE9fQ0xLSU5fMVgxICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSFJDV0xfQ1NCX1RPX0NMS0lOXzJYMSAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl8zWDEgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBIUkNXTF9DU0JfVE9fQ0xLSU5fNFgxICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSFJDV0xfQ1NCX1RPX0NMS0lOXzVYMSAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl82WDEgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBIUkNXTF9DU0JfVE9fQ0xLSU5fN1gxICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSFJDV0xfQ1NCX1RPX0NMS0lOXzhYMSAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl85WDEgICAgICAgMHgwOTAwMDAwMAorI2RlZmluZSBIUkNXTF9DU0JfVE9fQ0xLSU5fMTBYMSAgICAgIDB4MEEwMDAwMDAKKyNkZWZpbmUgSFJDV0xfQ1NCX1RPX0NMS0lOXzExWDEgICAgICAweDBCMDAwMDAwCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl8xMlgxICAgICAgMHgwQzAwMDAwMAorI2RlZmluZSBIUkNXTF9DU0JfVE9fQ0xLSU5fMTNYMSAgICAgIDB4MEQwMDAwMDAKKyNkZWZpbmUgSFJDV0xfQ1NCX1RPX0NMS0lOXzE0WDEgICAgICAweDBFMDAwMDAwCisjZGVmaW5lIEhSQ1dMX0NTQl9UT19DTEtJTl8xNVgxICAgICAgMHgwRjAwMDAwMAorCisjZGVmaW5lIEhSQ1dMX1ZDT19CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXTF9WQ09fMVgyICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0xfVkNPXzFYNCAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEhSQ1dMX1ZDT18xWDggICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorCisjZGVmaW5lIEhSQ1dMX0NPUkVfVE9fQ1NCX0JZUEFTUyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXTF9DT1JFX1RPX0NTQl8xWDEgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSFJDV0xfQ09SRV9UT19DU0JfMV81WDEgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhSQ1dMX0NPUkVfVE9fQ1NCXzJYMSAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBIUkNXTF9DT1JFX1RPX0NTQl8yXzVYMSAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgSFJDV0xfQ09SRV9UT19DU0JfM1gxICAgICAgICAweDAwMDYwMDAwCisKKy8qCisgKiBMQ1JSIC0gQ2xvY2sgUmF0aW8gUmVnaXN0ZXIgKDEwLjMuMS4xNikKKyAqLworI2RlZmluZSBMQ1JSX0RCWVAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIExDUlJfREJZUF9TSElGVCAgICAgICAgMzEKKyNkZWZpbmUgTENSUl9CVUZDTURDICAgMHgzMDAwMDAwMAorI2RlZmluZSBMQ1JSX0JVRkNNRENfMSAweDEwMDAwMDAwCisjZGVmaW5lIExDUlJfQlVGQ01EQ18yIDB4MjAwMDAwMDAKKyNkZWZpbmUgTENSUl9CVUZDTURDXzMgMHgzMDAwMDAwMAorI2RlZmluZSBMQ1JSX0JVRkNNRENfNCAweDAwMDAwMDAwCisjZGVmaW5lIExDUlJfQlVGQ01EQ19TSElGVCAgICAgMjgKKyNkZWZpbmUgTENSUl9FQ0wgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBMQ1JSX0VDTF80ICAgICAweDAwMDAwMDAwCisjZGVmaW5lIExDUlJfRUNMXzUgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgTENSUl9FQ0xfNiAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBMQ1JSX0VDTF83ICAgICAweDAzMDAwMDAwCisjZGVmaW5lIExDUlJfRUNMX1NISUZUICAgICAgICAgMjQKKyNkZWZpbmUgTENSUl9FQURDICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBMQ1JSX0VBRENfMSAgICAweDAwMDEwMDAwCisjZGVmaW5lIExDUlJfRUFEQ18yICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgTENSUl9FQURDXzMgICAgMHgwMDAzMDAwMAorI2RlZmluZSBMQ1JSX0VBRENfNCAgICAweDAwMDAwMDAwCisjZGVmaW5lIExDUlJfRUFEQ19TSElGVCAgICAgICAgMTYKKyNkZWZpbmUgTENSUl9DTEtESVYgICAgMHgwMDAwMDAwRgorI2RlZmluZSBMQ1JSX0NMS0RJVl8yICAweDAwMDAwMDAyCisjZGVmaW5lIExDUlJfQ0xLRElWXzQgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTENSUl9DTEtESVZfOCAgMHgwMDAwMDAwOAorI2RlZmluZSBMQ1JSX0NMS0RJVl9TSElGVCAgICAgICAwCisKKyNlbmRpZgkvKiBfX01QQzgzWFhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC5oIGIvaW5jbHVkZS9uZXQuaAppbmRleCBlNTBjMzgxLi42MjNkMjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC5oCisrKyBiL2luY2x1ZGUvbmV0LmgKQEAgLTI5LDcgKzI5LDcgQEAKICMgZW5kaWYKICNlbmRpZgkvKiBDT05GSUdfTVBDNXh4eCAqLwogCi0jaWYgIWRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkgJiYgKGRlZmluZWQoQ09ORklHXzgyNjApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NjApKQorI2lmICFkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpICYmIGRlZmluZWQoQ09ORklHX0NQTTIpCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQogI2lmIGRlZmluZWQoQ09ORklHX0VUSEVSX09OX1NDQykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BkLmggYi9pbmNsdWRlL3NwZC5oCmluZGV4IDFhZDRkODAuLjU0YjYwZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3BkLmgKKysrIGIvaW5jbHVkZS9zcGQuaApAQCAtMjUsNTQgKzI1LDgyIEBACiAjZGVmaW5lIF9TUERfSF8KIAogdHlwZWRlZiBzdHJ1Y3Qgc3BkX2VlcHJvbV9zIHsKLSAgIHVuc2lnbmVkIGNoYXIgaW5mb19zaXplOyAgIC8qICMgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIHNlcmlhbCBtZW1vcnkgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGNoaXBfc2l6ZTsgICAvKiBUb3RhbCAjIG9mIGJ5dGVzIG9mIFNQRCBtZW1vcnkgZGV2aWNlICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBtZW1fdHlwZTsgICAgLyogRnVuZGFtZW50YWwgbWVtb3J5IHR5cGUgKEZQTSwgRURPLCBTRFJBTS4uLikgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgbnJvd19hZGRyOyAgIC8qICMgb2YgUm93IEFkZHJlc3NlcyBvbiB0aGlzIGFzc2VtYmx5ICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIG5jb2xfYWRkcjsgICAvKiAjIG9mIENvbHVtbiBBZGRyZXNzZXMgb24gdGhpcyBhc3NlbWJseSAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBucm93czsgICAgICAgLyogIyBvZiBNb2R1bGUgUm93cyBvbiB0aGlzIGFzc2VtYmx5ICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgZGF0YXdfbHNiOyAgIC8qIERhdGEgV2lkdGggb2YgdGhpcyBhc3NlbWJseSAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGRhdGF3X21zYjsgICAvKiAuLi4gRGF0YSBXaWR0aCBjb250aW51YXRpb24gICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciB2b2x0YWdlOyAgICAgLyogVm9sdGFnZSBpbnRlcmZhY2Ugc3RhbmRhcmQgb2YgdGhpcyBhc3NlbWJseSAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgY2xrX2N5Y2xlOyAgIC8qIFNEUkFNIEN5Y2xlIHRpbWUgYXQgQ0w9WCAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGNsa19hY2Nlc3M7ICAvKiBTRFJBTSBBY2Nlc3MgZnJvbSBDbG9jayBhdCBDTD1YICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBjb25maWc7ICAgICAgLyogRElNTSBDb25maWd1cmF0aW9uIHR5cGUgKG5vbi1wYXJpdHksIEVDQykgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgcmVmcmVzaDsgICAgIC8qIFJlZnJlc2ggUmF0ZS9UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIHByaW13OyAgICAgICAvKiBQcmltYXJ5IFNEUkFNIFdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBlY3c7ICAgICAgICAgLyogRXJyb3IgQ2hlY2tpbmcgU0RSQU0gd2lkdGggICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgbWluX2RlbGF5OyAgIC8qIE1pbiBDbG9jayBEZWxheSBmb3IgQmFjayB0byBCYWNrIFJhbmRvbSBBZGRyZXNzICovCi0gICB1bnNpZ25lZCBjaGFyIGJ1cnN0bDsgICAgICAvKiBCdXJzdCBMZW5ndGhzIFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBuYmFua3M7ICAgICAgLyogIyBvZiBCYW5rcyBvbiBFYWNoIFNEUkFNIERldmljZSAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgY2FzX2xhdDsgICAgIC8qIENBUyMgTGF0ZW5jaWVzIFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGNzX2xhdDsgICAgICAvKiBDUyMgTGF0ZW5jeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciB3cml0ZV9sYXQ7ICAgLyogV3JpdGUgTGF0ZW5jeSAoYWxzbyBjYWxsZWQgV3JpdGUgUmVjb3ZlcnkgdGltZSkgKi8KLSAgIHVuc2lnbmVkIGNoYXIgbW9kX2F0dHI7ICAgIC8qIFNEUkFNIE1vZHVsZSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGRldl9hdHRyOyAgICAvKiBTRFJBTSBEZXZpY2UgQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBjbGtfY3ljbGUyOyAgLyogTWluIFNEUkFNIEN5Y2xlIHRpbWUgYXQgQ0w9WC0xICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgY2xrX2FjY2VzczI7IC8qIFNEUkFNIEFjY2VzcyBmcm9tIENsb2NrIGF0IENMPVgtMSAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGNsa19jeWNsZTM7ICAvKiBNaW4gU0RSQU0gQ3ljbGUgdGltZSBhdCBDTD1YLTIgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBjbGtfYWNjZXNzMzsgLyogTWF4IFNEUkFNIEFjY2VzcyBmcm9tIENsb2NrIGF0IENMPVgtMiAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgdHJwOyAgICAgICAgIC8qIE1pbiBSb3cgUHJlY2hhcmdlIFRpbWUgKHRSUCkgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIHRycmQ7ICAgICAgICAvKiBNaW4gUm93IEFjdGl2ZSB0byBSb3cgQWN0aXZlICh0UlJEKSAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciB0cmNkOyAgICAgICAgLyogTWluIFJBUyB0byBDQVMgRGVsYXkgKHRSQ0QpICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgdHJhczsgICAgICAgIC8qIE1pbmltdW0gUkFTIFB1bHNlIFdpZHRoICh0UkFTKSAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIHJvd19kZW5zOyAgICAvKiBEZW5zaXR5IG9mIGVhY2ggcm93IG9uIG1vZHVsZSAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBjYV9zZXR1cDsgICAgLyogQ29tbWFuZCBhbmQgQWRkcmVzcyBzaWduYWwgaW5wdXQgc2V0dXAgdGltZSAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgY2FfaG9sZDsgICAgIC8qIENvbW1hbmQgYW5kIEFkZHJlc3Mgc2lnbmFsIGlucHV0IGhvbGQgdGltZSAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGRhdGFfc2V0dXA7ICAvKiBEYXRhIHNpZ25hbCBpbnB1dCBzZXR1cCB0aW1lICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBkYXRhX2hvbGQ7ICAgLyogRGF0YSBzaWduYWwgaW5wdXQgaG9sZCB0aW1lICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgc3NldFsyNl07ICAgIC8qIFN1cGVyc2V0IEluZm9ybWF0aW9uIChtYXkgYmUgdXNlZCBpbiBmdXR1cmUpICAgICovCi0gICB1bnNpZ25lZCBjaGFyIHNwZF9yZXY7ICAgICAvKiBTUEQgRGF0YSBSZXZpc2lvbiBDb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBja3N1bTsgICAgICAgLyogQ2hlY2tzdW0gZm9yIGJ5dGVzIDAtNjIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgbWlkWzhdOyAgICAgIC8qIE1hbnVmYWN0dXJlcidzIEpFREVDIElEIGNvZGUgcGVyIEpFUC0xMDhFICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIG1sb2M7ICAgICAgICAvKiBNYW51ZmFjdHVyaW5nIExvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBtcGFydFsxOF07ICAgLyogTWFudWZhY3R1cmVyJ3MgUGFydCBOdW1iZXIgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgcmV2WzJdOyAgICAgIC8qIFJldmlzaW9uIENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIG1kYXRlWzJdOyAgICAvKiBNYW51ZmFjdHVyaW5nIERhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBzZXJudW1bNF07ICAgLyogQXNzZW1ibHkgU2VyaWFsIE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIHVuc2lnbmVkIGNoYXIgbXNwZWNbMjddOyAgIC8qIE1hbnVmYWN0dXJlciBTcGVjaWZpYyBEYXRhICAgICAgICAgICAgICAgICAgICAgICovCi0gICB1bnNpZ25lZCBjaGFyIGZyZXE7ICAgICAgICAvKiBJbnRlbCBzcGVjaWZpY2F0aW9uIGZyZXF1ZW5jeSAgICAgICAgICAgICAgICAgICAqLwotICAgdW5zaWduZWQgY2hhciBpbnRlbF9jYXM7ICAgLyogSW50ZWwgU3BlY2lmaWNhdGlvbiBDQVMjIExhdGVuY3kgc3VwcG9ydCAgICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyIGluZm9fc2l6ZTsgICAvKiAgMCAjIGJ5dGVzIHdyaXR0ZW4gaW50byBzZXJpYWwgbWVtb3J5ICovCisJdW5zaWduZWQgY2hhciBjaGlwX3NpemU7ICAgLyogIDEgVG90YWwgIyBieXRlcyBvZiBTUEQgbWVtb3J5IGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgbWVtX3R5cGU7ICAgIC8qICAyIEZ1bmRhbWVudGFsIG1lbW9yeSB0eXBlICovCisJdW5zaWduZWQgY2hhciBucm93X2FkZHI7ICAgLyogIDMgIyBvZiBSb3cgQWRkcmVzc2VzIG9uIHRoaXMgYXNzZW1ibHkgKi8KKwl1bnNpZ25lZCBjaGFyIG5jb2xfYWRkcjsgICAvKiAgNCAjIG9mIENvbHVtbiBBZGRycyBvbiB0aGlzIGFzc2VtYmx5ICovCisJdW5zaWduZWQgY2hhciBucm93czsgICAgICAgLyogIDUgIyBvZiBNb2R1bGUgUm93cyBvbiB0aGlzIGFzc2VtYmx5ICovCisJdW5zaWduZWQgY2hhciBkYXRhd19sc2I7ICAgLyogIDYgRGF0YSBXaWR0aCBvZiB0aGlzIGFzc2VtYmx5ICovCisJdW5zaWduZWQgY2hhciBkYXRhd19tc2I7ICAgLyogIDcgLi4uIERhdGEgV2lkdGggY29udGludWF0aW9uICovCisJdW5zaWduZWQgY2hhciB2b2x0YWdlOyAgICAgLyogIDggVm9sdGFnZSBpbnRmIHN0ZCBvZiB0aGlzIGFzc2VtYmx5ICovCisJdW5zaWduZWQgY2hhciBjbGtfY3ljbGU7ICAgLyogIDkgU0RSQU0gQ3ljbGUgdGltZSBhdCBDTD1YICovCisJdW5zaWduZWQgY2hhciBjbGtfYWNjZXNzOyAgLyogMTAgU0RSQU0gQWNjZXNzIGZyb20gQ2xvY2sgYXQgQ0w9WCAqLworCXVuc2lnbmVkIGNoYXIgY29uZmlnOyAgICAgIC8qIDExIERJTU0gQ29uZmlndXJhdGlvbiB0eXBlICovCisJdW5zaWduZWQgY2hhciByZWZyZXNoOyAgICAgLyogMTIgUmVmcmVzaCBSYXRlL1R5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHByaW13OyAgICAgICAvKiAxMyBQcmltYXJ5IFNEUkFNIFdpZHRoICovCisJdW5zaWduZWQgY2hhciBlY3c7ICAgICAgICAgLyogMTQgRXJyb3IgQ2hlY2tpbmcgU0RSQU0gd2lkdGggKi8KKwl1bnNpZ25lZCBjaGFyIG1pbl9kZWxheTsgICAvKiAxNSBmb3IgQmFjayB0byBCYWNrIFJhbmRvbSBBZGRyZXNzICovCisJdW5zaWduZWQgY2hhciBidXJzdGw7ICAgICAgLyogMTYgQnVyc3QgTGVuZ3RocyBTdXBwb3J0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIG5iYW5rczsgICAgICAvKiAxNyAjIG9mIEJhbmtzIG9uIEVhY2ggU0RSQU0gRGV2aWNlICovCisJdW5zaWduZWQgY2hhciBjYXNfbGF0OyAgICAgLyogMTggQ0FTIyBMYXRlbmNpZXMgU3VwcG9ydGVkICovCisJdW5zaWduZWQgY2hhciBjc19sYXQ7ICAgICAgLyogMTkgQ1MjIExhdGVuY3kgKi8KKwl1bnNpZ25lZCBjaGFyIHdyaXRlX2xhdDsgICAvKiAyMCBXcml0ZSBMYXRlbmN5IChha2EgV3JpdGUgUmVjb3ZlcnkpICovCisJdW5zaWduZWQgY2hhciBtb2RfYXR0cjsgICAgLyogMjEgU0RSQU0gTW9kdWxlIEF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyIGRldl9hdHRyOyAgICAvKiAyMiBTRFJBTSBEZXZpY2UgQXR0cmlidXRlcyAqLworCXVuc2lnbmVkIGNoYXIgY2xrX2N5Y2xlMjsgIC8qIDIzIE1pbiBTRFJBTSBDeWNsZSB0aW1lIGF0IENMPVgtMSAqLworCXVuc2lnbmVkIGNoYXIgY2xrX2FjY2VzczI7IC8qIDI0IFNEUkFNIEFjY2VzcyBmcm9tIENsb2NrIGF0IENMPVgtMSAqLworCXVuc2lnbmVkIGNoYXIgY2xrX2N5Y2xlMzsgIC8qIDI1IE1pbiBTRFJBTSBDeWNsZSB0aW1lIGF0IENMPVgtMiAqLworCXVuc2lnbmVkIGNoYXIgY2xrX2FjY2VzczM7IC8qIDI2IE1heCBBY2Nlc3MgZnJvbSBDbG9jayBhdCBDTD1YLTIgKi8KKwl1bnNpZ25lZCBjaGFyIHRycDsgICAgICAgICAvKiAyNyBNaW4gUm93IFByZWNoYXJnZSBUaW1lICh0UlApKi8KKwl1bnNpZ25lZCBjaGFyIHRycmQ7ICAgICAgICAvKiAyOCBNaW4gUm93IEFjdGl2ZSB0byBSb3cgQWN0aXZlICh0UlJEKSAqLworCXVuc2lnbmVkIGNoYXIgdHJjZDsgICAgICAgIC8qIDI5IE1pbiBSQVMgdG8gQ0FTIERlbGF5ICh0UkNEKSAqLworCXVuc2lnbmVkIGNoYXIgdHJhczsgICAgICAgIC8qIDMwIE1pbmltdW0gUkFTIFB1bHNlIFdpZHRoICh0UkFTKSAqLworCXVuc2lnbmVkIGNoYXIgcm93X2RlbnM7ICAgIC8qIDMxIERlbnNpdHkgb2YgZWFjaCByb3cgb24gbW9kdWxlICovCisJdW5zaWduZWQgY2hhciBjYV9zZXR1cDsgICAgLyogMzIgQ21kICsgQWRkciBzaWduYWwgaW5wdXQgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGNoYXIgY2FfaG9sZDsgICAgIC8qIDMzIENtZCBhbmQgQWRkciBzaWduYWwgaW5wdXQgaG9sZCB0aW1lICovCisJdW5zaWduZWQgY2hhciBkYXRhX3NldHVwOyAgLyogMzQgRGF0YSBzaWduYWwgaW5wdXQgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGNoYXIgZGF0YV9ob2xkOyAgIC8qIDM1IERhdGEgc2lnbmFsIGlucHV0IGhvbGQgdGltZSAqLworCXVuc2lnbmVkIGNoYXIgdHdyOyAgICAgICAgIC8qIDM2IFdyaXRlIFJlY292ZXJ5IHRpbWUgdFdSICovCisJdW5zaWduZWQgY2hhciB0d3RyOyAgICAgICAgLyogMzcgSW50IHdyaXRlIHRvIHJlYWQgZGVsYXkgdFdUUiAqLworCXVuc2lnbmVkIGNoYXIgdHJ0cDsgICAgICAgIC8qIDM4IEludCByZWFkIHRvIHByZWNoYXJnZSBkZWxheSB0UlRQICovCisJdW5zaWduZWQgY2hhciBtZW1fcHJvYmU7ICAgLyogMzkgTWVtIGFuYWx5c2lzIHByb2JlIGNoYXJhY3RlcmlzdGljcyAqLworCXVuc2lnbmVkIGNoYXIgdHJjdHJmY19leHQ7IC8qIDQwIEV4dGVuc2lvbnMgdG8gdHJjIGFuZCB0cmZjICovCisJdW5zaWduZWQgY2hhciB0cmM7ICAgICAgICAgLyogNDEgTWluIEFjdGl2ZSB0byBBdXRvIHJlZnJlc2ggdGltZSB0UkMgKi8KKwl1bnNpZ25lZCBjaGFyIHRyZmM7ICAgICAgICAvKiA0MiBNaW4gQXV0byB0byBBY3RpdmUgcGVyaW9kIHRSRkMgKi8KKwl1bnNpZ25lZCBjaGFyIHRja21heDsgICAgICAvKiA0MyBNYXggZGV2aWNlIGN5Y2xlIHRpbWUgdENLbWF4ICovCisJdW5zaWduZWQgY2hhciB0ZHFzcTsgICAgICAgLyogNDQgTWF4IERRUyB0byBEUSBza2V3ICovCisJdW5zaWduZWQgY2hhciB0cWhzOyAgICAgICAgLyogNDUgTWF4IFJlYWQgRGF0YUhvbGQgc2tldyB0UUhTICovCisJdW5zaWduZWQgY2hhciBwbGxfcmVsb2NrOyAgLyogNDYgUExMIFJlbG9jayB0aW1lICovCisJdW5zaWduZWQgY2hhciByZXNbMTVdOyAgICAgLyogNDcteHggSUREIGluIFNQRCBhbmQgUmVzZXJ2ZWQgc3BhY2UgKi8KKwl1bnNpZ25lZCBjaGFyIHNwZF9yZXY7ICAgICAvKiA2MiBTUEQgRGF0YSBSZXZpc2lvbiBDb2RlICovCisJdW5zaWduZWQgY2hhciBja3N1bTsgICAgICAgLyogNjMgQ2hlY2tzdW0gZm9yIGJ5dGVzIDAtNjIgKi8KKwl1bnNpZ25lZCBjaGFyIG1pZFs4XTsgICAgICAvKiA2NCBNZnIncyBKRURFQyBJRCBjb2RlIHBlciBKRVAtMTA4RSAqLworCXVuc2lnbmVkIGNoYXIgbWxvYzsgICAgICAgIC8qIDcyIE1hbnVmYWN0dXJpbmcgTG9jYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIG1wYXJ0WzE4XTsgICAvKiA3MyBNYW51ZmFjdHVyZXIncyBQYXJ0IE51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgcmV2WzJdOyAgICAgIC8qIDkxIFJldmlzaW9uIENvZGUgKi8KKwl1bnNpZ25lZCBjaGFyIG1kYXRlWzJdOyAgICAvKiA5MyBNYW51ZmFjdHVyaW5nIERhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIHNlcm51bVs0XTsgICAvKiA5NSBBc3NlbWJseSBTZXJpYWwgTnVtYmVyICovCisJdW5zaWduZWQgY2hhciBtc3BlY1syN107ICAgLyogOTkgTWFudWZhY3R1cmVyIFNwZWNpZmljIERhdGEgKi8KKworCS8qCisJICogT3BlbiBmb3IgQ3VzdG9tZXIgVXNlIHN0YXJ0aW5nIHdpdGggYnl0ZSAxMjguCisJICovCisJdW5zaWduZWQgY2hhciBmcmVxOyAgICAgICAgLyogMTI4IEludGVsIHNwZWM6IGZyZXF1ZW5jeSAqLworCXVuc2lnbmVkIGNoYXIgaW50ZWxfY2FzOyAgIC8qIDEyOSBJbnRlbCBzcGVjOiBDQVMjIExhdGVuY3kgc3VwcG9ydCAqLwogfSBzcGRfZWVwcm9tX3Q7CiAKKworLyoKKyAqIEJ5dGUgMiBGdW5kYW1lbnRhbCBNZW1vcnkgVHlwZXMuCisgKi8KKyNkZWZpbmUgU1BEX01FTVRZUEVfRlBNCQkoMHgwMSkKKyNkZWZpbmUgU1BEX01FTVRZUEVfRURPCQkoMHgwMikKKyNkZWZpbmUgU1BEX01FTVRZUEVfUElQRV9OSUJCTEUJKDB4MDMpCisjZGVmaW5lIFNQRF9NRU1UWVBFX1NEUkFNCSgweDA0KQorI2RlZmluZSBTUERfTUVNVFlQRV9ST00JCSgweDA1KQorI2RlZmluZSBTUERfTUVNVFlQRV9TR1JBTQkoMHgwNikKKyNkZWZpbmUgU1BEX01FTVRZUEVfRERSCQkoMHgwNykKKyNkZWZpbmUgU1BEX01FTVRZUEVfRERSMgkoMHgwOCkKKwogI2VuZGlmIC8qIF9TUERfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYl9wcGMvYm9hcmQuYyBiL2xpYl9wcGMvYm9hcmQuYwppbmRleCA1OTUxZDU2Li5jNGIxNmU4IDEwMDY0NAotLS0gYS9saWJfcHBjL2JvYXJkLmMKKysrIGIvbGliX3BwYy9ib2FyZC5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8bmV0Lmg+CiAjaW5jbHVkZSA8c2VyaWFsLmg+CiAjaWZkZWYgQ0ZHX0FMTE9DX0RQUkFNCi0jaWYgIShkZWZpbmVkKENPTkZJR184MjYwKXx8ZGVmaW5lZChDT05GSUdfTVBDODU2MCkpCisjaWYgIWRlZmluZWQoQ09ORklHX0NQTTIpCiAjaW5jbHVkZSA8Y29tbXByb2MuaD4KICNlbmRpZgogI2VuZGlmCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlpbml0X3RpbWViYXNlLAogI2VuZGlmCiAjaWZkZWYgQ0ZHX0FMTE9DX0RQUkFNCi0jaWYgIShkZWZpbmVkKENPTkZJR184MjYwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTYwKSkKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BNMikKIAlkcHJhbV9pbml0LAogI2VuZGlmCiAjZW5kaWYKQEAgLTI5Myw2ICsyOTMsMTEgQEAKIAlwcnRfODI2MF9yc3IsCiAJcHJ0XzgyNjBfY2xrcywKICNlbmRpZiAvKiBDT05GSUdfODI2MCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKKwlwcmludF9jbG9ja19jb25mLAorI2VuZGlmCisKIAljaGVja2NwdSwKICNpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KQogCXBydF9tcGM1eHh4X2Nsa3MsCkBAIC0zNjAsNyArMzY1LDcgQEAKIAkvKiBjb21waWxlciBvcHRpbWl6YXRpb24gYmFycmllciBuZWVkZWQgZm9yIEdDQyA+PSAzLjQgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogCi0jaWYgIShkZWZpbmVkKENPTkZJR184MjYwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTYwKSkKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BNMikKIAkvKiBDbGVhciBpbml0aWFsIGdsb2JhbCBkYXRhICovCiAJbWVtc2V0ICgodm9pZCAqKSBnZCwgMCwgc2l6ZW9mIChnZF90KSk7CiAjZW5kaWYKQEAgLTQ5NSw2ICs1MDAsOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCiAJYmQtPmJpX21iYXJfYmFzZSA9IENGR19NQkFSOwkvKiBiYXNlIG9mIGludGVybmFsIHJlZ2lzdGVycyAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKKwliZC0+YmlfaW1tcmJhciA9IENGR19JTU1SQkFSOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODIyMCkKIAliZC0+YmlfbWJhcl9iYXNlID0gQ0ZHX01CQVI7CS8qIGJhc2Ugb2YgaW50ZXJuYWwgcmVnaXN0ZXJzICovCiAJYmQtPmJpX2lucGZyZXEgICA9IGdkLT5pbnBfY2xrOwpAQCAtNTIxLDEyICs1MjksMTIgQEAKIAlXQVRDSERPR19SRVNFVCAoKTsKIAliZC0+YmlfaW50ZnJlcSA9IGdkLT5jcHVfY2xrOwkvKiBJbnRlcm5hbCBGcmVxLCBpbiBIeiAqLwogCWJkLT5iaV9idXNmcmVxID0gZ2QtPmJ1c19jbGs7CS8qIEJ1cyBGcmVxLCAgICAgIGluIEh6ICovCi0jaWYgZGVmaW5lZChDT05GSUdfODI2MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU2MCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQogCWJkLT5iaV9jcG1mcmVxID0gZ2QtPmNwbV9jbGs7CiAJYmQtPmJpX2JyZ2ZyZXEgPSBnZC0+YnJnX2NsazsKIAliZC0+Ymlfc2NjZnJlcSA9IGdkLT5zY2NfY2xrOwogCWJkLT5iaV92Y28gICAgID0gZ2QtPnZjb19vdXQ7Ci0jZW5kaWYgLyogQ09ORklHXzgyNjAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwogI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCiAJYmQtPmJpX2lwYmZyZXEgPSBnZC0+aXBiX2NsazsKIAliZC0+YmlfcGNpZnJlcSA9IGdkLT5wY2lfY2xrOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IDI5YzI0YzguLjYxODYyYWEgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiBpbnQgcnRsODE2OV9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgc2NjX2luaXRpYWxpemUoYmRfdCopOwogZXh0ZXJuIGludCBza2dlX2luaXRpYWxpemUoYmRfdCopOwotZXh0ZXJuIGludCB0c2VjX2luaXRpYWxpemUoYmRfdCosIGludCk7CitleHRlcm4gaW50IHRzZWNfaW5pdGlhbGl6ZShiZF90KiwgaW50LCBjaGFyICopOwogCiBzdGF0aWMgc3RydWN0IGV0aF9kZXZpY2UgKmV0aF9kZXZpY2VzLCAqZXRoX2N1cnJlbnQ7CiAKQEAgLTE1NSwxMyArMTU1LDI4IEBACiAJc2tnZV9pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUMxKQotCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDApOworCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDAsIENPTkZJR19NUEM4NVhYX1RTRUMxX05BTUUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDMSkKKwl0c2VjX2luaXRpYWxpemUoYmlzLCAwLCBDT05GSUdfTVBDODNYWF9UU0VDMV9OQU1FKTsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01QQzg1WFhfVFNFQzIpCi0JdHNlY19pbml0aWFsaXplKGJpcywgMSk7CisJdHNlY19pbml0aWFsaXplKGJpcywgMSwgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRSk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUMyKQorCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDEsIENPTkZJR19NUEM4M1hYX1RTRUMyX05BTUUpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9GRUMpCi0JdHNlY19pbml0aWFsaXplKGJpcywgMik7CisJdHNlY19pbml0aWFsaXplKGJpcywgMiwgQ09ORklHX01QQzg1WFhfRkVDX05BTUUpOworI2Vsc2UKKyMgICAgaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDMykKKwl0c2VjX2luaXRpYWxpemUoYmlzLCAyLCBDT05GSUdfTVBDODVYWF9UU0VDM19OQU1FKTsKKyMgICAgZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUMzKQorCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDIsIENPTkZJR19NUEM4M1hYX1RTRUMzX05BTUUpOworIyAgICBlbmRpZgorIyAgICBpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUM0KQorCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDMsIENPTkZJR19NUEM4NVhYX1RTRUM0X05BTUUpOworIyAgICBlbGlmIGRlZmluZWQoQ09ORklHX01QQzgzWFhfVFNFQzQpCisJdHNlY19pbml0aWFsaXplKGJpcywgMywgQ09ORklHX01QQzgzWFhfVFNFQzRfTkFNRSk7CisjICAgIGVuZGlmCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BVTFYMDApCiAJYXUxeDAwX2VuZXRfaW5pdGlhbGl6ZShiaXMpOwo=